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 相关文章推荐
PHP4实际应用经验篇(9)
Oct 09 PHP
PHP4实际应用经验篇(2)
Oct 09 PHP
简单的php 验证图片生成函数
May 21 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
PHP面向对象概念
Nov 06 PHP
php 启动报错如何解决
Jan 17 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
Oct 30 PHP
PHP中的流(streams)浅析
Jul 02 PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 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压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
js输出列表实现代码
2010/09/12 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
python使用post提交数据到远程url的方法
2015/04/29 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
python3 拼接字符串的7种方法
2018/09/12 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
用Python进行websocket接口测试
2020/10/16 Python
python 基于opencv去除图片阴影
2021/01/26 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
教师绩效考核方案
2014/01/21 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
销售顾问工作计划书
2014/08/15 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
整改落实自查报告
2014/11/05 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
2015年化验室工作总结
2015/04/23 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python