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 相关文章推荐
打造计数器DIY三步曲(上)
Oct 09 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
PHP代码优化之成员变量获取速度对比
Feb 28 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
PHP中is_file()函数使用指南
May 08 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
php解析xml 的四种简单方法(附实例)
Jul 11 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
php中序列化与反序列化详解
Feb 13 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 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
多重?l件?合查?(一)
2006/10/09 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
Python中统计函数运行耗时的方法
2015/05/05 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
解决Python对齐文本字符串问题
2019/08/28 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
可贵的沉默教学反思
2014/02/06 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
送给客户微信问候语!
2019/07/04 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python