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 05 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
php中rename函数用法分析
Nov 15 PHP
php通过sort()函数给数组排序的方法
Mar 18 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
PHP面向对象之工作单元(实例讲解)
Jun 26 PHP
PHP性能测试工具xhprof安装与使用方法详解
Apr 29 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
Laravel中正确地返回HTTP状态码方法示例
Sep 10 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中使用redis
2013/11/04 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
更新修改后的Python模块方法
2019/03/03 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
python 连续不等式语法糖实例
2020/04/15 Python
什么是python的自省
2020/06/21 Python
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
全球最大的游戏市场:G2A
2018/07/05 全球购物
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
如何查找网页漏洞
2016/06/22 面试题
大课间活动实施方案
2014/03/06 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
文明旅游倡议书
2015/04/28 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
Go语言设计模式之结构型模式
2021/06/22 Golang
Golang 遍历二叉树
2022/04/19 Golang