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测试程序运行时间的类
Feb 05 PHP
php小经验:解析preg_match与preg_match_all 函数
Jun 29 PHP
php实现的操作excel类详解
Jan 15 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
Jun 30 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
Symfony查询方法实例小结
Jun 28 PHP
mongodb和php的用法详解
Mar 25 PHP
PHP利用百度ai实现文本和图片审核
May 08 PHP
laravel执行php artisan migrate报错的解决方法
Oct 09 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 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
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
linux中cd命令使用详解
2015/01/08 PHP
php post换行的方法
2020/02/03 PHP
JS实现时间格式化的方式汇总
2013/10/16 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
Vue中props的使用详解
2018/06/15 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
Python装饰器基础详解
2016/03/09 Python
Python教程之全局变量用法
2016/06/27 Python
详解python中requirements.txt的一切
2017/03/03 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
python创建文本文件的简单方法
2020/08/30 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
化学学院毕业生自荐信范文
2013/12/17 职场文书
供应链金融服务方案
2014/05/25 职场文书
军训结束新闻稿
2015/07/17 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
在Python中如何使用yield
2021/06/07 Python