PHP語言本身可以用 instead of 和 as 關鍵字來解決多個 trait 成員與同名方法衝突的問題,但似乎沒有直接解決同名成員屬性衝突的問題。
屬性名稱衝突很少見,但這並不意味著它們不會發生。
您可以將舊特徵檔案複製到新特徵中,更改新檔案的成員屬性名稱,並引用新特徵。
直接更改原始特徵成員的屬性名稱可能會影響專案。
如下:C類想使用A類和B類特徵的方法,但屬性名衝突,報錯。
fatal error: a and b define the same property ($prop) in the composition of c. however, the definition differs and is considered incompatible. class was composed。
trait a }trait b }class c $c = new c();echo $c->prop;PHP語言本身可以解決多個同名方法的trait成員與notof和as關鍵字衝突的問題,但這並不能修改member屬性。
錯誤:致命錯誤:為 A::p rop 定義了優先規則,但此方法不存在
class c }$c = new c();echo $c->prop;需要父類進行干預,相當於在衝突各方之間進行調解的中間人。
將任何特徵引入父類都等同於告訴特徵停止衝突。
子類繼承自父類並引入另乙個特徵,重新宣告該屬性並分配乙個初始值,這相當於告訴另乙個特徵也停止衝突,並且它支援你。
此時,子類繼承家族企業並解決衝突。
注意:在C類中public $prop = 'trait_b'
它必須等於 B 特徵中的值,否則將報告致命錯誤。
trait a }trait b }class p class c extends p }$c = new c();echo $c->prop;$c->speakenglish();c->speakchinese();在這一點上,使用父類可以巧妙地解決php trait成員屬性衝突的問題,使兩個無法更改的特徵可以同時被我使用而不會發生衝突。