第一部分:OPP和模式
第一章:抽象类、接口和契约式编程
1.1:抽象类
1.方法原型:(prototype)是指方法的定义中剔除方法体之后的签名。它包括存取级别、函数关键字,函数名称和参数。它不包 括({})或括号内的任何代码。例如:public function myfunction($parameter); 就是一个方法原型。
2.抽象类没有为它所声明的方法定义方法体,所以使用new是不能直接创建它的实例的。要创建实例就要写一个类extends这个抽 象类,并实现它所声明的所有方法。
3.要充分发挥抽象类的特点,须做到:
1).如果一个类包含一个抽象方法就必须声明为抽象类;
2).声明为抽象的方法,在实现时必须包含相同的或者更低的访问权限。例如:
abstrct class abstractFunction{
protected function Afunction($paramter);
protected function Bfunction($paramter);
}
class instanceFunction extends abstractFunction{
protected function Afunction($paramter){...} //或者public function Afunction($paramter){...}
public function Bfunction($paramter){...}//或者protected function Bfunction($paramter){...}
//而不能写成private function Bfunction($paramter){...}
}
3).不能用new来创建抽象类的实例。
4).被声明为抽象类的方法不能包含方法体。
5).如果extends的类被声明为abstract,则可以不用实现所有的抽象方法。
4.抽象类的使用:
定义一个抽象类:
abstract class Car{
abstract function getTheCarType($car);
}
要创建一个抽象类实例,必须继承这个抽象类并实现它:
class FastCar extends Car{
public function getTheCarType($car){ return fastType;}
}
创建一个类来使用这个公共类:
class MyCar {
protected $carType;
protected $carMaxSpeed;
protected $carLimitSpeed;
public function __construct($carType = 'fmailyUse',$carLimitSpeed = '200'){
$this->carType = $carType;
$this->carMaxSpeed = array();
$this->carLimitSpeed = $carLimitSpeed;
}
public function jundgeSpeed(){
if($this->careType == 'fmailyUse' && $this->carLimitSpeed >= '200'){
echo "It's very deangerous .if the car for fmaily,it's speed should < 200";
}else{
echo "good ! Now,the speed is safe.";
}
}
}
使用抽象类:
$myCar = new MyCar('fmailyUse');
$myCar->jundgeSpeed($careType,300);