PHP面向对象程序设计之接口(interface)
接口(interface)是抽象方法和静态常量定义的集合。接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。
为什么说接口是一种特殊的抽象类呢?如果一个抽象类里面的所有的方法都是抽象方法,那么我们就换一种声明方法使用“接口”;也就是说接口里面所有的方法必须都是声明为抽象方法,另外接口里面不能声明变量(但可声明常量constant),而且接口里面所有的成员都是public权限的。所以子类在实现的时候 也一定要使用public权限实限。
我们先写接口的定义,下面的例子是接口的一个简单写法。
<?php interface One{
//定义一个常量
const constant = 'constant value';
//定义抽象方法1
public function fun1();
//定义抽象方法
public function fun2();
}
上例中定义了一个接口“one”,里面声明了两个抽象方法“fun1”和”fun2”,因为接口里面所有的方法都是抽象方法,所以在声明抽象方法的时候就不用像抽象类那样使用“abstract”这个关键字了,默认的已经加上这个关键字,另外在接口里边的”public”这个访问权限也可以去掉,因为默认就是public的,因为接口里所有成员都要是公有的,所在对于接口里面的成员我们就不能使用“private”的和“protected”的权限 了,都要用public或是默认的。另外在接口里面我们也声明了一个常量“constant“, 因为在接口里面不能用变量成员,所以我们要使用 const这个关键字声明。
因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实例对象; 它也做为一种规范,所有抽象方法需要子类去实现。
我们可以使用”extends”关键字让一个接口去继承另一个接口:
<?php interface One{
//定义一个常量
const constant = 'constant value';
//定义抽象方法1
public function fun1();
//定义抽象方法
public function fun2();
} //使用extends继承另外一个接口
interface Two extends One{
public function fun3();
public function fun4();
}
我们定义一接口的子类去实现接口中全部抽象方法使用的关键字是“implements”,而不是我们前面所说的“extends”。
<?php interface One{
//定义一个常量
const constant = 'constant value';
//定义抽象方法1
public function fun1();
//定义抽象方法
public function fun2();
} class Tree implements One{
public function fun1()
{ }
public function fun2()
{ }
}
我们也可以使用抽象类,去实现接口中的部分抽象方法,但要想实例化对象,这个抽象类还要有子类把它所有的抽象方法都实现才行。
<?php interface One{
//定义一个常量
const constant = 'constant value';
//定义抽象方法1
public function fun1();
//定义抽象方法
public function fun2();
} abstract class Two implements One{
public function fun1()
{ }
abstract public function fun3();
} class Three extends Two{
public function fun2()
{ }
public function fun3()
{ }
}
PHP是单继承的,一个类只能有一父类,但是一个类可以实现多个接口。
<?php interface One{
//定义一个常量
const constant = 'constant value';
//定义抽象方法1
public function fun1();
//定义抽象方法
public function fun2();
} interface Two{
public function fun3();
} class Three implements One,Two{
public function fun1(){ }
public function fun2(){ }
public function fun3()
{ }
}
PHP中不仅一个类可以实现多个接口,也可以在继承一个类的同时实现多个接口, 一定要先继承类再去实现接口。
<?php interface One{
//定义一个常量
const constant = 'constant value';
//定义抽象方法1
public function fun1();
//定义抽象方法
public function fun2();
} interface Two{
public function fun3();
} class Three{
public function fun4(){ }
}
class Four extends Three implements One,Two{
public function fun1()
{ }
public function fun2()
{ }
public function fun3()
{ }
}
最新文章
- 软工_Alpha阶段事后分析总计
- Hibernate框架之入门
- MVC3迁移MVC4相关问题
- ZigBee HA示例程序分析
- discuz random函数
- android 27 ListView
- eclipse下开发简单的Web Service
- HDU-1047(DP-二进制状态压缩)
- LINQ 用法,返回结果不是在定义时取值,而是在调用时实时取值,有意思!
- LAMP 搭建wordpress部署教程贴.
- 使用js对select动态添加和删除OPTION示例代码
- linux_windows下配置tomcat区别 ,不同子域名映射不同 项目
- Leetcode-34-Search Insert Position-(Medium)
- CentOS 7 x64 安装 Ceph
- angularJS入门笔记
- sql 参数化查询问题
- 关于Android UI 优化
- c# .net WebRequest 始终报域名无法解析
- 20155301 Exp4 恶意代码分析
- mysql 5.7新特新 操作json 数组
热门文章
- 【ARDUINO】蓝牙(HC-05)透传
- opencv2.4.9+VS2010配置
- python3----练习题(装饰器)
- 简述synchronized和java.util.concurrent.locks.Lock异同
- 怎样从Mysql官网下载mysql.tar.gz版本的安装包
- JZOJ.3769【NOI2015模拟8.14】A+B
- textarea输入字符有限制
- CodeForces 157A Game Outcome
- phpstorm 9.0最新 注册码
- 解决chrome在ubuntu+root模式下打不开的问题