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来处理多个提交任务
May 08 PHP
PHP读取XML值的代码(推荐)
Jan 01 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
php中使用url传递数组的方法
Feb 11 PHP
基础的WordPress插件制作教程
Nov 24 PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 PHP
php中的常用魔术方法汇总
Feb 14 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
XHProf报告字段含义的解析
May 17 PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 PHP
php基于SQLite实现的分页功能示例
Jun 21 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 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
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
vue实现登录功能
2020/12/31 Vue.js
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
深入理解Python变量与常量
2016/06/02 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
python计算日期之间的放假日期
2018/06/05 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
如何基于python生成list的所有的子集
2019/11/11 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
super()与this()的区别
2016/01/17 面试题
运动会广播稿200米
2014/01/27 职场文书
心理学专业求职信
2014/06/16 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
入党介绍人考察意见
2015/06/01 职场文书
2016元旦主持人经典开场白台词
2015/12/03 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript