php – 特征的构造函数定义如何冲突?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 特征的构造函数定义如何冲突?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
PHP 5.4.9中,以下示例触发致命错误“B具有来自traits的碰撞构造函数定义”.
trait T {
    public function __construct () {
        echo __CLASS__ . ": constructor called.\n";
    }
}

class A {
    use T;
}

class B extends A {
    use T;
}

当traIT包含与构造函数不同的方法时没有问题,并且当构造函数实际复制到类中时没有问题(不使用特征,“语言辅助复制和粘贴”功能).

这里的构造函数有什么特别之处? PHP应该弄清楚其中一个会覆盖另一个吗?我找不到有关此限制的任何内容in the manual.

This related question提到了解决问题的方法(通过使用特征方法的别名),但不是首先引起它的原因.

尝试使用以下代码
class A {
    use T;
    use T;
}

因为这是你通过从A扩展然后再次使用T为B而有效编写的内容.

如果需要在基类和子类中使用特征T,请仅在基类中使用它.

如果仅在子类中需要它,请仅在叶子类中使用它.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 特征的构造函数定义如何冲突?全部内容,希望文章能够帮你解决php – 特征的构造函数定义如何冲突?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。