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 超链接 抓取实现代码
Jun 29 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
Jun 06 PHP
PHP实现在线阅读PDF文件的方法
Jun 17 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
php session的应用详细介绍
Mar 22 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
php简单中奖算法(实例)
Aug 15 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
浅谈PHP封装CURL
Mar 06 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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 mkdir()定义和用法
2009/01/14 PHP
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
UI Events 用户界面事件
2012/06/27 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
python安装教程
2018/02/28 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
材料物理专业大学毕业生求职信
2013/10/15 职场文书
办公室文员工作职责
2014/01/31 职场文书
经管应届生求职信范文
2014/05/18 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
滴水洞导游词
2015/02/10 职场文书
2016新年慰问信范文
2015/03/25 职场文书
仙境之桥观后感
2015/06/16 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python