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 array_flip() 删除数组重复元素
Jan 14 PHP
php连接数据库代码应用分析
May 29 PHP
探讨PHP使用eAccelerator的API开发详解
Jun 09 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
php微信开发接入
Aug 27 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
python线程、进程和协程详解
2016/07/19 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Python模块相关知识点小结
2020/03/09 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
国际商务专业学生个人的自我评价
2013/09/28 职场文书
职工运动会邀请函
2014/02/02 职场文书
挂科检讨书范文
2014/02/20 职场文书
新年联欢会主持词
2014/03/27 职场文书
司机岗位职责说明书
2014/07/29 职场文书
绿色小区申报材料
2014/08/22 职场文书
采购内勤岗位职责
2015/04/13 职场文书
成事在人观后感
2015/06/16 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL