在PHP 5.4.9中,以下示例会触发致命错误"B has colliding constructor definitions coming from traits"。
当trait中包含与构造函数不同的方法时,没有问题,当构造函数实际上被复制到类中(不使用traits,“语言辅助复制和粘贴”功能)也没有问题。
那么这里的构造函数有什么特别之处呢?PHP难道不能找出其中一个覆盖了另一个吗?我在手册中找不到任何关于这个限制的信息。 这个相关问题提到了解决问题的方法(通过为trait方法使用别名),但没有提到导致问题的原因。
trait T {
public function __construct () {
echo __CLASS__ . ": constructor called.\n";
}
}
class A {
use T;
}
class B extends A {
use T;
}
当trait中包含与构造函数不同的方法时,没有问题,当构造函数实际上被复制到类中(不使用traits,“语言辅助复制和粘贴”功能)也没有问题。
那么这里的构造函数有什么特别之处呢?PHP难道不能找出其中一个覆盖了另一个吗?我在手册中找不到任何关于这个限制的信息。 这个相关问题提到了解决问题的方法(通过为trait方法使用别名),但没有提到导致问题的原因。