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+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 PHP
Zend的MVC机制使用分析(二)
May 02 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 PHP
PHP中explode函数和split函数的区别小结
Aug 24 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
laravel学习教程之存取器
2016/07/30 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
javascript 有用的脚本函数
2009/05/07 Javascript
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
python实现简单颜色识别程序
2020/02/19 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
幼师自我鉴定范文
2013/10/01 职场文书
高校毕业生自我鉴定
2013/10/27 职场文书
工业设计专业推荐信
2013/10/29 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
党支部特色活动方案
2014/08/20 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
财务总监岗位职责
2015/02/03 职场文书
辞职信标准格式
2015/02/27 职场文书