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成员属性冲突的问题,使两个无法更改的特征可以同时被我使用而不会发生冲突。