PHP接口类(interface)的定义、特点和应用示例


Posted in PHP onMay 18, 2020

本文实例讲述了PHP接口类(interface)的定义、特点和应用。分享给大家供大家参考,具体如下:

一、接口的定义:

简单形象的说,接口是类的模板,定义实现它的类需要实现哪些功能。

二、接口的特点:

  • 接口通过“interface”关键词来定义;
  • 上下级接口可以通过“extends”关键词继承;
  • 接口所有方法都是“public”权限(爱E族);
  • 接口可以定义常量成员,但不能定义变量成员;
  • 类通过“implements”关键词来实现接口,类必须完全实现接口定义的所有功能;
  • 一个类可以同时“implements”(实现)一个到多个接口;

三、为什么需要接口:

PHP 类是单继承,也就是不支持多继承,当一个类需要多个类的功能时,继承就无能为力了,为此 PHP 引入了类的接口技术。

四、举例:

1、定义一个接口:

早些年的博客网站,都有一个发布文章的功能,比如你现在看到的就是一篇介绍接口的文章,下面我们定义一个文章接口:

//定义一个文章接口
interface Article {
  //接口中有一个发布文章的接口
  public function publishArticle();
}

还有一些问答网站,有提问功能和回答功能,比如百度知道,爱问知识人:

interface Ask {
  public function question();
  public function answer();
}

2、接口的继承:

后来随着社交网络的兴起,很多网站的文章多了一个转发功能,文章模块功能升级了,我们把它叫做文章2.0“Article2”,“Article2”继承了Article的发布文章功能:

//定义Article2接口,继承Article接口
interface Article2 extends Article {
  //Article2接口比Article多了一个转发文章功能(爱E族)
  public function relayArticle();
}

3、接口的实现(接口的应用):

上面的接口已经定义好了,现在我们要实现接口了,比如就说您现在访问的网站爱E族(aiezu.com)吧,它既有发布文章功能,又有问答功能。所以我们的类Aiezu(爱E族)要同时两个接口:“Article”,“Ask”。

//Aiezu(爱E族)类要实现Article(文章)和问答(Ask)接口功能
class Aiezu implements Article,Ask {
  public function publishArticle() {
    echo "发布了一篇文章\n";
  }
  public function relayArticle() {
    echo "转发了一篇文章\n";
  }
  public function question() {
    echo "发表了一个问题\n";
  }
  public function answer(){
    echo "回答一个问题\n";
  }
}
$aiezu = new Aiezu();
$aiezu->relayArticle();
$aiezu->question();

注意,Aiezu类必须完全实现“Article”接口和“Ask”接口的所有功能,否则会报告下面错误:

PHP Fatal error:  Class Aiezu contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Article::publishArticle) in /tmp/xxx.php on line xxx

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
屏蔽浏览器缓存另类方法
Oct 09 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
PHP简单选择排序算法实例
Jan 26 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
Sep 23 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
Sep 11 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
php PDO判断连接是否可用的实现方法
Apr 03 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
php + ajax 实现的写入数据库操作简单示例
May 16 #PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 #PHP
Yii框架应用组件用法实例分析
May 15 #PHP
Yii框架小部件(Widgets)用法实例详解
May 15 #PHP
Yii框架安装简明教程
May 15 #PHP
php字符串函数 str类常见用法示例
May 15 #PHP
PHP数组array类常见操作示例
May 15 #PHP
You might like
如何隐藏你的.php文件
2007/01/04 PHP
php 远程图片保存到本地的函数类
2008/12/08 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
静态的动态续篇之来点XML
2006/12/23 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
Python脚本实现格式化css文件
2015/04/08 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
python发送告警邮件脚本
2018/09/17 Python
python:动态路由的Flask程序代码
2019/11/22 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
12岁生日感言
2014/01/21 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
学生个人评语大全
2015/01/04 职场文书
英语感谢信范文
2015/01/20 职场文书
客服专员岗位职责
2015/02/10 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
2015年小学开学寄语
2015/02/27 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
Python实现信息管理系统
2022/06/05 Python