很抱歉,如果这是重复的,我之前确实搜索过答案。
我正在努力使一个特性中定义的方法过载。它抛出了一个致命错误:
Fatal error: Configuration has colliding constructor definitions coming from traits in Configuration.php on line 18
他们的类别
<?php
namespace TheirsPackage;
use TheirsTheirTrait;
class Configration
{
use TheirTrait;
}
我的班级
<?php
namespace MyPackage;
use TheirsPackageConfiguration as BaseConfiguration;
use MyTraitMyTrait;
class Configuration extends BaseConfiguration
{
use MyTrait;
}
我的特点
use TheirsTheirTrait as BaseSomeTrait;
trait MyTrait
{
use BaseSomeTrait;
protected function someMethod($something)
{
// ...
}
}
您可以像这样解决构造函数冲突。
trait MyTrait {
use BaseSomeTrait{
BaseSomeTrait::__construct as private __otherConstruct;
}
public function __construct(/* maybe params here*/)
{
// maybe other code
$this->__otherConstruct(/* maybe params here*/);
// maybe other code
}
}
如果MyClass也有构造函数,你需要在那里额外做,或者可能只有在MyTrait没有构造函数的情况下才做。。。
看起来TheirsTheirTraitConfigration
和TheirsPackageConfiguration
都有构造函数,并且构造函数签名不兼容。(但如果没有两者的代码,就很难说了。)
如果TheirsPackageConfiguration
真的打算与TheirsTheirTraitConfigration
一起使用,那么应该为它们编写一份错误报告。否则,我想应该有一些关于如何在代码中使用类和特性的文档,这样它们就不会产生错误。