xxx and xxx define the same property ($xxx) in the composition of xxx
该错误是由于 php 的 trait 不支持属性名(成员变量)重复导致的,且当前没有太好的解决办法。
trait 可以有自己的成员变量,但是无法被覆盖
trait 覆盖关系是 当前类 > trait > 基类,对于方法冲突,trait 提供了 insteadof 和 as 的解决方案,但是对于成员变量,却只会报错。
举例如下:
正常代码:
|
|
报错代码:
|
|
折中的解决方案:
|
|
建议
虽然上方的折中办法可以解决这个问题,但非常不推荐使用(因为如果这样的话跟我直接把 trait 的代码写到 MyBaseClass 里面岂不是没区别了吗?),所以最终给的方式是,在定义 trait 时,尽量不要使用成员变量
- 本文作者: kriss
- 本文链接: http://www.kriss.pub/2018/03/14/php-trait/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
