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 相关文章推荐
cache_lite试用
Feb 14 PHP
php设计模式 Decorator(装饰模式)
Jun 26 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
php中spl_autoload详解
Oct 17 PHP
php站内搜索关键词变亮的实现方法
Dec 30 PHP
php无序树实现方法
Jul 28 PHP
培养自己的php编码规范
Sep 28 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
解决Laravel5.5下的toArray问题
Oct 15 PHP
PHP实现页面静态化深入讲解
Mar 04 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
global.php
2006/12/09 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
Python函数参数类型*、**的区别
2015/04/11 Python
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
德国团购网站:Groupon德国
2018/03/13 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
银行求职信个人范文
2013/12/16 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
2015年质检工作总结
2015/05/04 职场文书
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server