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 获取select下拉列表框的值
May 08 PHP
PHP中单引号与双引号的区别分析
Aug 19 PHP
浅谈php和.net的区别
Sep 28 PHP
php获取YouTube视频信息的方法
Feb 11 PHP
php读取csc文件并输出
May 21 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
php实现图片上传、剪切功能
May 07 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
Aug 12 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 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查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
php动态绑定变量的用法
2015/06/16 PHP
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
给我一面国旗 python帮你实现
2019/09/30 Python
通过实例解析python描述符原理作用
2020/01/22 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
应聘教师求职信范文
2015/03/20 职场文书
教师研修随笔感言
2015/11/18 职场文书
电力安全学习心得体会
2016/01/18 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python