抽象類(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();
}
}
可以把抽象類看成一個模版,繼承抽象類,是去在模版裏面加上更多內容,當需要修改很多使用這套模版的頁面時,只用去修改模版本身即可。