承續一個類別的功能,建立出新的類別,稱之為類別的繼承。
這時,原來的類別稱為"超類別(superclass)""基底類別(base class)"或是"父類別"
而繼承這個基底類別,定義出的新類別稱之為"子類別(subclass)""衍生類別(derived class)"或是"擴充類別"。
繼承時要用的關鍵字extends。"class 衍生類別 extends 基底類別"。
他的公式:A類別是基底類別,而B類別是A類別的衍生類別。
//基底類別 } //衍生類別 } |
當然,衍生類別是可以不斷的衍生下去,到三層第四層...一直到第N層。
不過PHP有個缺點,他就是不能同時繼承多個類別。換個方式說,PHP沒有所謂的多重繼承。
雖然衍生類別裡原則上是可以使用基底類別的方法或是屬性,但是這會因為基底類別宣告時設定的存取而有差別。我用下面這個表格來表示。
基底類別的宣告 | 從衍生類別存取 | |
直接 | 從衍生類別定義的方法存取 | |
public | O | O |
protected | X | O |
private | X | X |
另外,有一點很重要,在建立衍生類別的實體時,會自動呼叫衍生類別的建構子,但是不會自動呼叫基底類別的建構子。要想要在衍生類別裡面呼叫基底類別的建構子,要這樣呈現"parent::__construct()"。解建構子也是一樣,解建構子的呼叫方法"parent::__destruct()"。
下面我就寫個範例,提供參考:
class HelloOOP{ //php4的宣告成員屬性 //建構子 For PHP5 //定義解建構子 //宣告成員方法 //呼叫成員方法來使用。 } //宣告成員方法,不加上關鍵字都視為public //呼叫成員屬性來使用。 } } class Bclass extends HelloOOP{ function __construct($clasaB_inputA,$clasaB_inputB){ //執行基地類別的建構子 } //宣告成員方法 //呼叫基底類別的成員方法來使用。 } } $A=new HelloOOP("HELLO","你好"); //建立出實體之後運用裡面的方法。 會顯示 HELLO //建立出實體之後運用裡面的屬性。會顯示 "你好" $B=new Bclass("BA","BB"); //這邊他會顯示"測試" //這邊他會顯示"繼承" |