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
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
php记录日志的实现代码
Aug 08 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
php fsockopen中多线程问题的解决办法[翻译]
Nov 09 PHP
如何判断php数组的维度
Jun 10 PHP
php开启openssl的方法
May 15 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 PHP
PHP redis实现超迷你全文检索
Mar 04 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
PHP二维数组分页2种实现方法解析
Jul 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
php获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
Python上下文管理器和with块详解
2017/09/09 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
在python中求分布函数相关的包实例
2020/04/15 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
应届护士推荐信
2013/11/16 职场文书
生产现场工艺工程师岗位职责
2013/11/28 职场文书
中学教师培训制度
2014/01/31 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python