1.抽象类
使用关键字:abstract
没有为它所声明的所以方法定义实现的内容(即函数体),可将抽象类看作部分类。抽象类可以不实现所有方法,它具有定义抽象方法(即为,只有声明,没有函数体的方法)的能力。当抽象类被继承时,这些方法将会被实现。换言之,在继承抽象类的扩展类中,同名方法带有函数体。另外,抽象类中,也可以定义除抽象方法以外的、具有函数体的完整方法。
//定义一个抽象类Car abstract class Car{ abstract function getMaximumSpeed(); }
在类的声明中使用abstract修饰符,就可以将某个类声明为抽象的。
说明:public function abc();即为方法声明,是方法的定义中,剔除了方法体之后的签名,这个声明称为方法的原型。
2.继承类
使用关键字:extends
这里只讲继承抽象类的继承类。
继承类,也就是扩展类。它能继承父类的方法和部分变量,并使用。
继承抽象类的继承类(扩展类)必须将抽象类中的抽象方法具体完整地实现(即写出函数体)。
//定义一个扩展抽象类的类FastCar class FastCar extends Car{ public function getMaximumSpeed(){ return 150; } }
再定义一个类,使用抽象类提供的公共功能
//使用抽象类提供的公共功能 class Street{ protected $speedLimit; protected $cars; public function __construct($speedLimit=200){ $this->cars=array(); $this->speedLimit= $speedLimit; } protected function isStreetLegal($car){ if ($car->getMaximumSpeed()< $this->speedLimit ) { return true; }else{ return false; } } public function addCar($car){ if($this->isStreetLegal($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.'; } } }
3.实例化
使用关键字:new
实例化的形式
$abc=new abc();
调用的形式
$abc->XXX();
注意:抽象类不能被实例化,因为其中的抽象方法没有函数体。所以只有通过实例化抽象类的扩展类来使用抽象类中的方法。
$street=new Street; $fastCar=new FastCar; $street->addCar($fastCar);
======完整代码=======

1 <?php 2 //定义一个抽象类Car 3 abstract class Car{ 4 abstract function getMaximumSpeed(); 5 } 6 7 //定义一个扩展抽象类的类FastCar 8 class FastCar extends Car{ 9 public function getMaximumSpeed(){ 10 return 150; 11 } 12 } 13 14 //使用抽象类提供的公共功能 15 class Street{ 16 protected $speedLimit; 17 protected $cars; 18 19 public function __construct($speedLimit=200){ 20 $this->cars=array(); 21 $this->speedLimit= $speedLimit; 22 } 23 24 protected function isStreetLegal($car){ 25 if ($car->getMaximumSpeed()< $this->speedLimit ) { 26 return true; 27 }else{ 28 return false; 29 } 30 } 31 32 public function addCar($car){ 33 if($this->isStreetLegal($car)){ 34 echo 'The car was allowed on the road.'; 35 $this->cars[]=$car; 36 }else{ 37 echo 'The car is too fast and was not allowed on the road.'; 38 } 39 } 40 } 41 $street=new Street; 42 $fastCar=new FastCar; 43 $street->addCar($fastCar); 44 ?>