在開發(fā)項(xiàng)目的時(shí)候,很多時(shí)候?yàn)榱丝梢愿啙嵏咝У膶?shí)現(xiàn)效果,會(huì)將一些通用的方法寫到一個(gè)類中,在用到的時(shí)候直接繼承就可以了,這里就用到的是php特效之一的繼承特性
類繼承(Inheritance)是面向?qū)ο缶幊蹋∣OP)的三大基本特性之一(封裝、繼承、多態(tài))。在PHP中,繼承允許一個(gè)類(子類/派生類)基于另一個(gè)類(父類/基類)來構(gòu)建,自動(dòng)獲得父類的屬性和方法,同時(shí)可以添加新的特性或修改繼承來的行為。
繼承的核心特性
代碼復(fù)用性(Code Reusability)
子類自動(dòng)繼承父類的所有public和protected屬性和方法
避免了代碼重復(fù),符合DRY(Don't Repeat Yourself)原則
層次化分類(Hierarchical Classification)
通過繼承關(guān)系可以建立清晰的類層次結(jié)構(gòu)
表現(xiàn)"一般與特殊"的關(guān)系(父類代表一般性,子類代表特殊性)
方法重寫(Method Overriding)
子類可以重新定義父類的方法(覆蓋)
運(yùn)行時(shí)根據(jù)對(duì)象類型決定調(diào)用哪個(gè)版本的方法(多態(tài)性)
這里就有一個(gè)有趣的問題,當(dāng)前類a繼承了類b,在a類中重新定義了方法create,這時(shí)候a 調(diào)用父類b里的方法的c方法,c方法中調(diào)用了create方法這個(gè)時(shí)候執(zhí)行的是a中的create方法還是b里面的create方法
看起來很繞,其實(shí)直接從代碼走一遍就可以知道結(jié)果了
所以結(jié)果就是a類中的方法
即使 c 方法是在父類 B 中定義的,但其中的 $this->create() 調(diào)用的是當(dāng)前對(duì)象實(shí)例的方法
因?yàn)楫?dāng)前對(duì)象是類 A 的實(shí)例,所以調(diào)用的是類 A 的 create 方法
這種行為就是多態(tài)(Polymorphism)的體現(xiàn),子類可以改變父類方法的行為