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 相关文章推荐
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
PHP Zip解压 文件在线解压缩的函数代码
May 26 PHP
PHP下操作Linux消息队列完成进程间通信的方法
Jul 24 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
PHP判断上传文件类型的解决办法
Oct 20 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
PHP+Ajax+JS实现多图上传
May 07 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
Nov 06 PHP
PHP自动识别当前使用移动终端
May 21 PHP
PHP实现微信对账单处理
Oct 01 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 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
session 的生命周期是多长
2006/10/09 PHP
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
深入学习Bootstrap表单
2016/12/13 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python面向对象特殊成员
2017/04/24 Python
图解Python变量与赋值
2018/04/03 Python
python实现多人聊天室
2020/03/31 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
python 实现字符串下标的输出功能
2020/02/13 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
医院竞聘演讲稿
2014/05/16 职场文书
九寨沟导游词
2015/02/02 职场文书
工作推荐信模板
2015/03/25 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
高中班主任寄语
2019/06/21 职场文书
五年级作文之劳动作文
2019/11/12 职场文书