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 相关文章推荐
php地址引用(php地址引用的效率问题)
Mar 23 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
浅谈php serialize()与unserialize()的用法
Jun 05 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
PHP基于MySQL数据库实现对象持久层的方法
Jun 17 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
在laravel框架中实现封装公共方法全局调用
Oct 14 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
PHP批量生成缩略图的代码
2008/07/19 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
PHP加密技术的简单实现
2016/09/04 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
JS实现浏览上传文件的代码
2017/08/23 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
Python控制Firefox方法总结
2019/06/03 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
锐步英国官网:Reebok英国
2019/11/29 全球购物
打架检讨书500字
2014/01/29 职场文书
超市开学活动方案
2014/03/01 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
民间个人借款协议书
2014/09/30 职场文书
2014年党务工作总结
2014/11/25 职场文书
2016七夕情人节感言
2015/12/09 职场文书
go web 预防跨站脚本的实现方式
2021/06/11 Golang
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS