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 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
PHP header函数分析详解
Aug 06 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
PHP中替换键名的简易方法示例详解
Jan 07 PHP
设置php页面编码的两种方法示例介绍
Mar 03 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
PHP常量define和const的区别详解
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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
实现PHP中session存储及删除变量
2018/10/15 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
JavaScript的document对象和window对象详解
2010/12/30 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
python实现数据图表
2017/07/29 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
Python双向循环链表实现方法分析
2018/07/30 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
英语师范专业毕业生自荐信
2013/09/21 职场文书
小学防溺水制度
2014/01/29 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
付款证明模板
2015/06/19 职场文书
小学见习报告
2015/06/23 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
浅谈克隆 JavaScript
2021/11/02 Javascript