抽象类(abstract class)就是定一个一个公共的基类,而将特定的细节留给继承者来实现。具体的说,当需要创建一个基础的对象的时候,创建所需的某些方法并没有完整定义出来时,就要用到抽象类。通过抽象概念可以让让项目架构拥有更好的扩展性。
例如:
<?php
abstract class AbstractClass
{
// 强制要求子类定义这些方法
abstract protected function getValue();
abstract protected function prefixValue($prefix);
}
class ConcreteClass1 extends AbstractClass
{
protected function getValue() {
return "ConcreteClass1";
}
public function prefixValue($prefix) {
return "{$prefix}ConcreteClass1";
}
}
?>
由于抽象类没有为声明的所有方法定义实现内容,大家可能会将抽象类看作分部类。
抽象类可以不实现所有方法,它具有定义抽象方法的特殊能力,这些抽象方法只是缺少方法体的方法原型。当抽象类呗继承的时候这些方法将被实现。
然而抽象类不一定只有抽象方法,我们也可以定义具有完整实现体的方法,
例如:
abstract class AbstractClass
{
// 强制要求子类定义这些方法
abstract protected function getValue();
abstract protected function prefixValue($prefix);
// 普通方法(非抽象方法)
public function printOut() {
print $this->getValue() . "\n";
}
}
class ConcreteClass1 extends AbstractClass
{
protected function getValue() {
return "ConcreteClass1";
}
public function prefixValue($prefix) {
return "{$prefix}ConcreteClass1";
}
public function view(){
//直接调用方法
return $this->printOut();
}
}
可以把抽象类看成一个模版,继承抽象类,是去在模版里面加上更多内容,当需要修改很多使用这套模版的页面时,只用去修改模版本身即可。