加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

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

发布时间:2020-05-25 09:02:22 所属栏目: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 {

在 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,请仅在基类中使用它.

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

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读