您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: