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 相关文章推荐
PHP6 先修班 JSON实例代码
Aug 23 PHP
常用的php对象类型判断
Aug 27 PHP
PHP迅雷、快车、旋风下载专用链转换代码
Jun 15 PHP
php数组合并的二种方法
Mar 21 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
Aug 23 PHP
Laravel 5框架学习之环境与配置
Apr 08 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
Feb 07 PHP
php访问对象中的成员的实例方法
Nov 17 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连接sql server 2005环境配置及问题解决
2014/08/08 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
javascript 对象定义方法 简单易学
2009/03/22 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
vue结合element-ui使用示例
2019/01/24 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
js实现3D旋转相册
2020/08/02 Javascript
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
Python实现分段线性插值
2018/12/17 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
Puma印度官网:德国运动品牌
2019/10/06 全球购物
解释i节点在文件系统中的作用
2013/11/26 面试题
客户经理岗位职责
2013/12/08 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
教师校本培训方案
2014/02/26 职场文书
初婚未育证明样本
2014/10/24 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
告知书格式
2015/07/01 职场文书
航班延误投诉信
2015/07/02 职场文书
新学期家长寄语2016
2015/12/03 职场文书
人民币符号
2022/02/17 杂记