面試-PHP篇-trait

自 PHP 5.4.0 起,PHP 實現了一種代碼複用的方法,稱爲 trait。

traits 與 interfaces 區別 及 traits 解決了什麼痛點?

知乎一個有趣的比喻:

你可以把trait當作是多繼承的一種變種,是一種加強型的接口,比如當你需要定義一個car的class,此時你需要實現vehicle定義的接口,比如必須有引擎,有外殼這些,但你這時會發現每個都自己去實現是不是太複雜了?比如對你而言引擎的實現你並不關心,你只要買一個用就好了,你比較在意汽車的外形,那麼這時候就用到了trait,他替你封裝好了引擎的相關實現,因此你只要關心怎麼使引擎動起來即可,不用自己去實現。當然換一種方法也是能實現的,比如你把engine作爲一個類的屬性,然後使用時new一個封裝好的engine類也是可以的,只是用trait更方便。

從方便偷懶的角度來說:

Interface只給了些方法名字,方法還得靠自己全部實現,方便個屁。而trait拿來就可以直接使用了,這才舒服嘛。

一個外國小哥這樣描述trait:

Trait本質上是語言輔助的複製和粘貼。即使用trait相當於把它封裝的方法代碼複製粘貼到此處。

traits 解決了什麼痛點:(摘自PHP官方文檔)

自 PHP 5.4.0 起,PHP 實現了一種代碼複用的方法,稱爲 trait。

Trait 是爲類似 PHP 的單繼承語言而準備的一種代碼複用機制。Trait 爲了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類中複用 method。Trait 和 Class 組合的語義定義了一種減少複雜性的方式,避免傳統多繼承和 Mixin 類相關典型問題。

Trait 和 Class 相似,但僅僅旨在用細粒度和一致的方式來組合功能。 無法通過 trait 自身來實例化。它爲傳統繼承增加了水平特性的組合;也就是說,應用的幾個 Class 之間不需要繼承。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章