interface -- 接口类
2015-07-15 17:46
155 查看
<?php /** *为了声明接口,需要使用关键字interface *interface IExampleInterface {} *说明(大多数开发人员选择在节后名称前加上大写字母I作为前缀,以便在代码和生成的文档中将其与类区别开来) *和继承抽象类需要使用extends关键字不同的是,实现接口使用的是implements关键字。 *class ExampleClass implements IExampleInterface {} *前面提到过,接口优于抽象类的一点是每个类可以使用多个接口。当希望在一个类中实现两个或者两个以上接口时,我们可以用逗号将它们隔开。例如,如果有一个具有数组风格的对象,希望它同时具有迭代和计数的功能,那么我们可以定义这样的一个类。 *class MyArrayLikeObject implements Iterator, Countable {} * * */ interface ISpeedInfo { function getMaximumSpeed(); } class Car { //任何基类方法 } class FastCar extends Car implements ISpeedInfo { function getMaximumSpeed() { return 150; } } class BadCar extends FastCar{} $a = new FastCar(); echo $a->getMaximumSpeed();//150 echo '<br />'; class Street extends FastCar { protected $speedLimit; protected $cars; public function __construct($speedLimit = 200) { $this->cars = array(); //初始化变量 $this->speedLimit = $speedLimit; } function isStreetLegal($car) { if($car instanceof ISpeedInfo) { if($car->getMaximumSpeed() < $this->speedLimit) { return true; } else { return false; } } else { //扩展类必须实现ISpeedInfo才能使street合法 return false; } } public function addCar($car) { if($this->isStreeLegal($car)) { echo 'The Car was allowed on the road.'; $this->cars[] = $car; } else { echo 'The Car is too fast and was not allowed on the road.'; } } } /* class Street extends FastCar{} */ $a = new Street(); echo $a->getMaximumSpeed(); //150
相关文章推荐
- 选择排序
- 南阳理工86 找球号
- CF 558C(Amr and Chemistry-构造法)
- Android会议室管理app
- C/C++:函数的编译方式与调用约定以及extern “C”的使用
- APP软件半成品测试技巧
- 使用fpm来制作rpm包
- Your build settings specify a provisioning profile with the UUID, no provisioning profile was found
- Oracle Licensing
- bzoj2179: FFT快速傅立叶
- Linux 服务器安全技巧
- 查看临界区等待线程数量
- error: invalid abbreviation code [25] for DIE at 0x0000003e in Assertion failed: (*offset_ptr == end_prologue_offset), function ParsePrologue, file /S
- 002--JDK、JRE、JVM区别
- OSChina客户端源码学习(2)--缓存的设计
- Block的学习笔记2
- 二分图匹配
- Magento使用php shell 命令更新索引(index)
- Linux下搭建Apache+php+MongoDB开发环境
- 压力测试了解