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 zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
两个php日期控制类实例
Dec 09 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
Thinkphp批量更新数据的方法汇总
Jun 29 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
PHP 递归效率分析
2009/11/24 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
PyMongo安装使用笔记
2015/04/27 Python
python递归计算N!的方法
2015/05/05 Python
python数组过滤实现方法
2015/07/27 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
django settings.py 配置文件及介绍
2019/07/15 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
python基于win32api实现键盘输入
2020/12/09 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
区域总监的岗位职责
2013/11/21 职场文书
外贸业务员工作职责
2014/01/06 职场文书
绩效工资分配方案
2014/01/18 职场文书
医院合作协议书
2014/08/19 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP