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 相关文章推荐
图书管理程序(一)
Oct 09 PHP
通达OA公共代码 php常用检测函数
Dec 14 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
thinkphp验证码显示不出来的解决方法
Mar 29 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
Linux平台php命令行程序处理管道数据的方法
Nov 10 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
YII框架模块化处理操作示例
Apr 26 PHP
Laravel 验证码认证学习记录小结
Dec 20 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数据集构建JSON格式及新数组的方法
2012/11/07 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
vue js秒转天数小时分钟秒的实例代码
2018/08/08 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
Python 用户登录验证的小例子
2013/03/06 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python循环语句之break与continue的用法
2015/10/14 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
python生成excel的实例代码
2017/11/08 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
总结python中pass的作用
2019/02/27 Python
Python实现元素等待代码实例
2019/11/11 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
python excel多行合并的方法
2020/12/09 Python
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
客服专员岗位职责
2014/02/28 职场文书
党支部换届选举方案
2014/05/08 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
Python简易开发之制作计算器
2022/04/28 Python
js 实现验证码输入框示例详解
2022/09/23 Javascript