抽象類別往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。
抽象類別是不完整的,它只能用作基底類別。在物件導向方法中,抽象類別主要用來進行類型隱藏和充當全域變數的角色。 (建議學習:PHP影片教學)
PHP 5 支援抽象類別和抽象方法。定義為抽象的類別不能被實例化。任何一個類,如果它裡面至少有一個方法是被聲明為抽象的,那麼這個類別就必須被宣告為抽象的。被定義為抽象的方法只是聲明了其呼叫方式(參數),不能定義其特定的功能實作。
繼承一個抽象類別的時候,子類別必須定義父類別中的所有抽象方法;另外,這些方法的存取控制必須和父類別中一樣(或更為寬鬆)。
例如某個抽象方法被宣告為受保護的,那麼子類別中實作的方法就應該宣告為受保護的或公有的,而不能定義為私有的。
此外方法的呼叫方式必須匹配,即類型和所需參數數量必須一致。
例如,子類別定義了一個可選參數,而父類別抽象方法的宣告裡沒有,則兩者的宣告並無衝突。
這也適用於 PHP 5.4 起的建構子。在 PHP 5.4 之前的建構子宣告可以不一樣的。
抽象類別範例
<?php 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"; } } class ConcreteClass2 extends AbstractClass { public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n"; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') ."\n"; ?>
以上例程會輸出:
ConcreteClass1 FOO_ConcreteClass1 ConcreteClass2 FOO_ConcreteClass2
以上是php抽象類別有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!