定义 :
定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。 这也适用于 PHP 5.4 起的构造函数。在 PHP 5.4 之前的构造函数声明可以不一样的。
1. 抽象方法实现的访问级别必须小于抽象类中的方法
2. 不能被实例化(不能用new来创建对象)
3. 被生命方法不能包含函数体
4. 扩展类也为抽象类,就不用实现所有的抽象函数
//shape为图形类,FourSidesShape为正方形,TreeSidesShape为三角形
//include_once("constant.php");
//shape为图形类,FourSidesShape为正方形,TreeSidesShape为三角形
abstract class Shape {
abstract public function getArea();
abstract public function getLength();
public function getType(){
}
}
class FourSidesShape extends Shape{
private $width;
private $heigth;
public function __construct($width,$height){
$this->width = $width;
$this->height = $height;
}
public function getArea(){
$area = $this->width * $this->height;
echo "面积:".$area;
}
public function getLength(){
$length = ($this->width+$this->height)*2;
echo "周长:".$length;
}
}
abstract class TreeSidesShape extends Shape{
}
/*试着new 一个 Shape,是否成功
$shape = new Shape();
*/
/*
1 试着注释掉 getArea方法
2 将getArea方法变为私有
3 将Shape类中getArea加一个空函数体
4 注释掉 Shape类中的 getArea 和 getLength方法
5
*/
/* 成功例子*/
$fShape = new FourSidesShape(10,20);
$fShape->getArea();
// $sShape = new TreeSidesShape();