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 相关文章推荐
第十二节 类的自动加载 [12]
Oct 09 PHP
用PHP实现验证码功能
Oct 09 PHP
打造计数器DIY三步曲(中)
Oct 09 PHP
图书管理程序(一)
Oct 09 PHP
不用数据库的多用户文件自由上传投票系统(2)
Oct 09 PHP
PHP无限分类的类
Jan 02 PHP
php动态实现表格跨行跨列实现代码
Nov 06 PHP
提高PHP编程效率的方法
Nov 07 PHP
PHP生成条形图的方法
Dec 10 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
Sep 13 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
Dec 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
PHP新手上路(八)
2006/10/09 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
常用PHP框架功能对照表
2014/10/23 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
Ubuntu下安装PyV8
2016/03/13 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python实现ID3决策树算法
2018/08/29 Python
pandas 层次化索引的实现方法
2019/07/06 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
Python sep参数使用方法详解
2020/02/12 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
Farnell德国:电子元器件供应商
2018/07/10 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
Linux的主要特性
2016/09/03 面试题
语文教育专业推荐信范文
2013/11/25 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
家长会学生演讲稿
2014/04/26 职场文书
机关保密工作承诺书
2015/05/04 职场文书
python 中yaml文件用法大全
2021/07/04 Python
Python 阶乘详解
2021/10/05 Python