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 相关文章推荐
一个数据采集类
Feb 14 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
Sep 23 PHP
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
golang 调用 php7详解及实例
Jan 04 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
PHP实现打包下载文件的方法示例
Oct 07 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 PHP
PHP利用Mysql锁解决高并发的方法
Sep 04 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下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Python元字符的用法实例解析
2018/01/17 Python
python构建深度神经网络(DNN)
2018/03/10 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
python通过链接抓取网站详解
2019/11/20 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
高二美术教学反思
2014/01/14 职场文书
关于母亲节的感言
2014/02/04 职场文书
施工安全责任书范本
2014/07/24 职场文书
《藏戏》教学反思
2016/02/23 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
MySQL七种JOIN类型小结
2021/10/24 MySQL
SQL Server Agent 服务无法启动
2022/04/20 SQL Server