扫码一下
查看教程更方便
php 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。 这也适用于 php 5.4 起的构造函数。在 php 5.4 之前的构造函数声明可以不一样的。
abstract class yourclassname{
public $name;
abstract public function method1();
abstract public function method2();
public function method3(){
... ... ;
}
}
抽象类 是在class
关键字前面加一个 abstract
关键字。抽象方法是在访问权限修饰符(public、protected或者 private)前面加上 abstract关键字。
说明:抽象类是不能被实例化的,继承了抽象类,则要把抽象类里的抽象方法都实现。这一点和有点像,实现接口就要把接口中的所有方法都实现。 反过来,如果一个类里定义了一个抽象方法,那这个类就必须是抽象类。
一个抽象类示例
method1();
$this->method2();
}
protected function method1()
{
echo "this is protected! \n";
}
private function method2()
{
echo "this is private! \n";
}
}
$obj = new website;
$obj->welcome();
?>
以上示例输出
hello 迹忆客
this is protected!
this is private!
注意:抽象方法只能是 public 或者 protected。在 一节中我们介绍过,父类中的 private 成员是不能被子类继承的。如果在抽象类中存在private的抽象方法,那在子类中又必须实现抽象方法,而子类又不能访问父类的private方法,这就麻烦了。所以php中对于将private方法定义成抽象方法的情况,直接报错
method1(); $this->method2(); } protected function method1() { echo "this is protected!\n"; } private function method2() { echo "this is private\n"; } } $obj = new website; $obj->welcome(); ?>
上述代码执行结果
php fatal error: abstract function abstractclass::method2() cannot be declared private