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游戏编程25个脚本代码
Feb 08 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
PHP访问Google Search API的方法
Mar 05 PHP
PHP计算指定日期所在周的开始和结束日期的方法
Mar 24 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
php array_multisort 对数组进行排序详解及实例代码
Oct 27 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
thinkphp5 路由分发原理
Mar 18 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入门速成(2)
2006/10/09 PHP
提升PHP执行速度全攻略
2006/10/09 PHP
php 中文和编码判断代码
2010/05/16 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
python非递归全排列实现方法
2017/04/10 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
OpenCV 模板匹配
2019/07/10 Python
python super用法及原理详解
2020/01/20 Python
Django返回HTML文件的实现方法
2020/09/17 Python
python ssh 执行shell命令的示例
2020/09/29 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
运动会入场词200字
2014/02/15 职场文书
家具促销活动方案
2014/02/16 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
幸福来敲门观后感
2015/06/04 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS