php面向对象全攻略 (十四) php5接口技术


Posted in PHP onSeptember 30, 2009

20.PHP5 接口技术
PHP 与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父
类。为了解决这个问题,PHP 引入了接口,接口的思想是指定了一个实现了该接口的类必须
实现的一系列方法。接口是一种特殊的抽象类,抽象类又是一种特殊的类,所以接口也是一
种特殊的类,为什么说接口是一种特殊的抽象类呢?如果一个抽象类里面的所有的方法都是
抽象方法,那么我们就换一种声明方法使用“接口”;也就是说接口里面所有的方法必须都是
声明为抽象方法,另外接口里面不能声明变量,而且接口里面所有的成员都是public 权限的。
所以子类在实现的时候也一定要使用public 权限实限。
声明一个类的时候我们使用的关键字是“class”,而接口一种特殊的类,使用的关键字
是“interface”;
类的定义:class 类名{ … } ,接口的声明:interface 接口名{ … }
代码片段

<? 
abstract class Demo{ 
var $test; 
abstract function fun1(); 
abstract function fun2(); 
function fun3(){ 
… . 
} 
} 
$demo=new Demo(); //抽象类为能产生实例对象,所以这样做是错的,实例化对象交给子类 
class Test extends Demo{ 
function fun1(){ 
… 
} 
function fun2(){ 
… 
} 
} 
$test=new Test(); //子类可以实例化对象,因为实现了父类中所有抽象方法 
?>

上例中定义了一个接口“one”,里面声明了两个抽象方法“fun1”和“fun2”,因为接
口里面所有的方法都是抽象方法,所以在声明抽象方法的时候就不用像抽象类那样使用
“abstract”这个关键字了,默认的已经加上这个关键字,另外在接口里边的“public”这个访
问权限也可以去掉,因为默认就是public 的,因为接口里所有成员都要是公有的,所在对于
接口里面的成员我们就不能使用“private”的和“protected”的权限了,都要用public 或是默
认的。另外在接口里面我们也声明了一个常量“constant“, 因为在接口里面不能用变量成
员,所以我们要使用const 这个关键字声明。
因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实
例对象;它也做为一种规范,所有抽象方法需要子类去实现。
我们可以使用“extends“关键字让一个接口去继承另一个接口;
代码片段
<?php 
//使用”extends”继承另外一个接口 
interface Two extends One{ 
function fun3(); 
function fun4(); 
} 
?>

而我们定义一接口的子类去实现接口中全部抽象方法使用的关键字是“implements”,而
不是我们前面所说的“extends”;
代码片段
<?php 
//使用“implements”这个关键字去实现接口中的抽象方法 
class Three implements One{ 
function fun1(){ 
… . 
} 
function fun2(){ 
… . 
} 
} 
//实现了全部方法,我们去可以使用子类去实例化对象了 
$three=new Three(); 
?>

我们也可以使用抽象类,去实现接口中的部分抽象方法,但要想实例化对象,这个抽象
类还要有子类把它所有的抽象方法都实现才行;
在前面我们说过,PHP 是单继承的,一个类只能有一父类,但是一个类可以实现多个接
口,就相当于一个类要遵守多个规范,就像我们不仅要遵守国家的法律,如果是在学校的话,
还要遵守学校的校规一样;
代码片段
<?php 
//使用implements实现多个接口 
class Four implemtns 接口一, 接口二, … .{ 
//必须把所有接口中的方法都要实现才可以实例化对象。 
} 
?>

PHP 中不仅一个类可以实现多个接口,也可以在继承一个类的同时实现多个接口,一定
要先继承类再去实现接口;
代码片段
<?php 
//使用extends继承一个类,使用implements实现多个接口 
class Four extends 类名一implemtns 接口一, 接口二, … .{ 
//所有接口中的方法都要实现才可以实例化对象 
… … … .. 
} 
?>
PHP 相关文章推荐
如何正确理解PHP的错误信息
Oct 09 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
php对大文件进行读取操作的实现代码
Jan 23 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
PHP面向对象程序设计之类与反射API详解
Dec 02 PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
Laravel 前端资源配置教程
Oct 18 PHP
PHP获取类私有属性的3种方法
Sep 10 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 #PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 #PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 #PHP
php面向对象全攻略 (九)访问类型
Sep 30 #PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 #PHP
php面向对象全攻略 (七) 继承性
Sep 30 #PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 #PHP
You might like
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
js取float型小数点后两位数的方法
2014/01/18 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
python远程登录代码
2008/04/29 Python
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
Python中将字典转换为列表的方法
2016/09/21 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
python画图的函数用法以及技巧
2019/06/28 Python
Python使用贪婪算法解决问题
2019/10/22 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
python list的index()和find()的实现
2020/11/16 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
旅游管理专业个人求职信范文
2013/12/24 职场文书
给女儿的表扬信
2014/01/18 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
药学职务聘任书
2014/03/29 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
高中生学习计划书
2014/09/15 职场文书
高中开学感言
2015/08/01 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
MySQL的安装与配置详细教程
2021/06/26 MySQL