PHP面向对象程序设计之接口的继承定义与用法详解


Posted in PHP onDecember 20, 2018

本文实例讲述了PHP面向对象程序设计之接口的继承定义与用法。分享给大家供大家参考,具体如下:

在PHP5中,接口是可以继承自另外一个接口的。这样代码的重用更有效了。要注意只有接口和接口之间使用 继承关键字 extends。类实现接口必须实现其抽象方法,使用实现关键字 implements

下面的这个例子定义接口User,User有两个抽象方法 getName和setName。 又定义了接口VipUser, 继承自User接口,并增加了和折扣相关的方法getDiscount。

最后定义了类 Vip ,实现了VipUser接口。并实现了其中的三个方法。

<?php
interface User {
  public function getName();
  public function setName($_name);
}
interface VipUser extends User {
  public function getDiscount(); //添加了获得折扣的抽象方法.
}
class Vip implements VipUser {
  private $name;
  private $discount = 0.8;// 定义折扣变量
  public function getName(){ //实现getName方法
    return $this->name;
  }
  public function setName($_name){//实现setName方法
    $this->name = $_name;
  }
  public function getDiscount(){//实现折扣方法.
    return $this->discount;
  }
}
?>

接口可以实现多继承,这是接口很特殊的地方。注意下面的代码和用法。

<?php
interface User {
  public function getName();
  public function setName($_name);
}
interface Administrator {
  public function setNews($_news);
}
//注意这里的多继承.
interface NewsAdministrator extends User,Administrator{
}
class NewsAdmin implements NewsAdministrator { //实现接口
  public function getName(){
    //.........
  }
  public function setName($_name){
    //.........
  }
  public function setNews($_news){
    //.........
  }
}
?>

抽象类实现接口,可以不实现其中的抽象方法,而将抽象方法的实现交付给具体能被实例化的类去处理。

<?php
interface User {
  public function getName();
  public function setName($_name);
}
//AbstractNormalUser 只实现了 User接口中的一个方法,
abstract class AbstractNormalUser{
  protected $name;
  public function getName(){
    return $this->name;
  }
}
//这里实现了接口的另外一个方法.
class NormalUser extends AbstractNormalUser {
  public function setName($_name){
    $this->name = $_name;
  }
}
$normalUser = new NormalUser();
$normalUser->setName("tom");
echo "name is ".$normalUser->getName();
?>

运行结果:

name is tom

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在PHP中使用与Perl兼容的正则表达式
Nov 26 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
基于php-fpm的配置详解
Jun 03 PHP
php调用shell的方法
Nov 05 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
如何通过Linux命令行使用和运行PHP脚本
Jul 29 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
PHP7 echo和print语句实例用法
Feb 15 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
PHP实现时间日期友好显示实现代码
Sep 08 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 #PHP
PHP自定义错误处理的方法分析
Dec 19 #PHP
PHP异常类及异常处理操作实例详解
Dec 19 #PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 #PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 #PHP
PHP获取星期几的常用方法小结
Dec 18 #PHP
php往mysql中批量插入数据实例教程
Dec 12 #PHP
You might like
php代码把全角数字转为半角数字
2007/12/10 PHP
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
一步一步学习PHP(3) php 函数
2010/02/15 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
php文件读取方法实例分析
2015/06/20 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
js 通用javascript函数库整理
2011/08/14 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
浅谈HTTP 缓存的那些事儿
2018/10/17 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
9种python web 程序的部署方式小结
2014/06/30 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python进程间通信用法实例
2015/06/04 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
python实现操作文件(文件夹)
2019/10/31 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
航空大学应届生求职信
2013/11/10 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
安全检查汇报材料
2014/12/26 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android