允许把类和方法声明为abstract,即抽象类和抽象方法。
第一:抽象类不能被实例化。
第二:抽象方法是必须被子类重写的方法。抽象方法只有方法的声明,而没有方法的实现内容。
第三:如果类中包含抽象方法,那么就必须定义为抽象类,不论是否还包含其他一般方法。
抽象类拥有尽可能多的共同代码,拥有尽可能少的数据。
抽象类通常代表一个抽象概念,它提供了一个继承的出发点,当设计一个新的抽象类时,一定使用来继承的。所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点均应当是抽象类。
抽象类继承抽象类,目的是对抽象类的扩展,不能重写其中的抽象方法
//定义一个抽象类
abstract class User{
public function __toString(){
return get_class($this);
}
}
//实例化这个类会出错
//echo new user();
class NormalUser extends User{
}
$a = new NormalUser();
echo ‘这是类’;
echo $a;
echo ‘的实例’;
单独设置一个抽象类是没有意义的,只有有了抽象方法,抽象类才有类血肉。
abstract class User{
protected $sal = 0;
//这里定义抽象方法。抽象方法没有方法体,而且方法结束使用;号。
abstract function getSal();
abstract function setSal($sal);
//这里定义它的__tostring方法
public function __toString(){
return get_class($this);
}
}
//此时类继承这个抽象类必须要重写这个两个抽象方法。哪怕是{}空的方法体
//注意:1.不能缺少参数。2.不能多余的参数。3.参数类型不能错误。
class NormalUser extends User{
function getSal(){}
function setSal($sal){}
}
抽象方法没有{},而采用;结束。参数的数量和类型必须一致
PHP5.0和5.1的类中允许静态抽象方法。在5.2以上,只有接口可以拥有静态抽象方法。