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学习笔记 用户注册模块用户类以及验证码类
Sep 20 PHP
PHP的PSR规范中文版
Sep 28 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 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
6种php上传图片重命名的方法实例
2013/11/04 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
事业单位接收函
2014/01/10 职场文书
运动会入场口号
2014/06/07 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书