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 相关文章推荐
模拟OICQ的实现思路和核心程序(二)
Oct 09 PHP
PHP时间戳使用实例代码
Jun 07 PHP
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 PHP
PHP文件注释标记及规范小结
Apr 01 PHP
CI框架开发新浪微博登录接口源码完整版
May 28 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
Jul 01 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
Laravel 前端资源配置教程
Oct 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 版获取重定向后的地址(代码)
2013/06/26 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
jQuery知识点整理
2015/01/30 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
Python IDLE入门简介
2017/12/08 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
python对XML文件的操作实现代码
2020/03/27 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
公务员年总结的自我评价
2013/10/25 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
学校党员个人问题整改措施思想汇报
2014/10/08 职场文书