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一些公用函数的集合
Mar 27 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
PHP中__set()实例用法和基础讲解
Jul 23 PHP
laravel 自定义常量的两种方案
Oct 14 PHP
PHP copy函数使用案例代码解析
Sep 01 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 17 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
php下MYSQL limit的优化
2008/01/10 PHP
php FPDF类库应用实现代码
2009/03/20 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
实现复选框全选/全不选切换
2006/12/23 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
python中cPickle用法例子分享
2014/01/03 Python
python中的常量和变量代码详解
2018/07/25 Python
django解决跨域请求的问题详解
2019/01/20 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
Python csv模块使用方法代码实例
2019/08/29 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
婚礼证婚人证婚词
2014/01/08 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
义卖募捐活动总结
2015/05/09 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers