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数据库连接时容易出错的特殊符号问题
Sep 01 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
有关php运算符的知识大全
Nov 03 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 PHP
linux中cd命令使用详解
Jan 08 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
PHP PDOStatement::errorInfo讲解
Jan 31 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 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
PR值查询 | PageRank 查询
2006/12/20 PHP
php下的权限算法的实现
2007/04/28 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
Python入门之modf()方法的使用
2015/05/15 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
养殖人员的创业计划书范文
2013/12/26 职场文书
汽车促销活动方案
2014/03/31 职场文书
春季防火方案
2014/05/10 职场文书
村委会贫困证明范文
2014/09/21 职场文书
休学证明范本
2015/06/19 职场文书
高中地理教学反思
2016/02/19 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
实现一个简单得数据响应系统
2021/11/11 Javascript
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python