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 相关文章推荐
第九节--绑定
Nov 16 PHP
利用PHP和AJAX创建RSS聚合器的代码
Mar 13 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
PHP下载文件的函数实例代码
May 18 PHP
php微信开发之百度天气预报
Nov 18 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
Aug 04 PHP
php通过pecl方式安装扩展的实例讲解
Feb 02 PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 PHP
PHP自定义错误处理的方法分析
Dec 19 PHP
PHP基于swoole多进程操作示例
Aug 12 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 PHP
PHP项目多语言配置平台实现过程解析
May 18 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实现WEB动态网页静态
2006/10/09 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
js表数据排序 sort table data
2009/02/18 Javascript
js类的静态属性和实例属性的理解
2009/10/01 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
jquery ui对话框实例代码
2013/05/10 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python实现发送邮件功能代码
2017/12/14 Python
python 实现A*算法的示例代码
2018/08/13 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
土木工程个人自荐信范文
2013/11/30 职场文书
饭店工作计划书
2014/01/10 职场文书
小学教师自我鉴定范文
2014/03/20 职场文书
售后服务承诺书
2014/03/26 职场文书
个人合作协议书范本
2014/04/18 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS