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 相关文章推荐
NOT NULL 和NULL
Jan 15 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
PHP的几个常用加密函数
Feb 03 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
php实现留言板功能(会话控制)
May 23 PHP
深入理解PHP中mt_rand()随机数的安全
Oct 12 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 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将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
js 设置选中行的样式的实现代码
2010/05/24 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
vue登录注册实例详解
2019/09/14 Javascript
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
python计算n的阶乘的方法代码
2019/10/25 Python
如何基于python操作json文件获取内容
2019/12/24 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
公安干警正风肃纪心得体会
2016/01/15 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
python 网络编程要点总结
2021/06/18 Python
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis