如果这是重复的道歉,我之前确实在搜索答案。
我正在努力重载特征中定义的方法。它抛出致命的错误:
Fatal error: Configuration has colliding constructor definitions coming from traits in Configuration.php on line 18
他们的班级
<?php
namespace Theirs\Package;
use Theirs\TheirTrait;
class Configration
{
use TheirTrait;
}
我的班级
<?php
namespace My\Package;
use Theirs\Package\Configuration as BaseConfiguration;
use My\Trait\MyTrait;
class Configuration extends BaseConfiguration
{
use MyTrait;
}
我的特质
use Theirs\TheirTrait as BaseSomeTrait;
trait MyTrait
{
use BaseSomeTrait;
protected function someMethod($something)
{
// ...
}
}
答案 0 :(得分:7)
你可以像这样解决构造函数碰撞。
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没有构造函数...
答案 1 :(得分:0)
看起来Theirs\TheirTrait\Configration
和Theirs\Package\Configuration
都有构造函数,构造函数签名不兼容。 (但没有两者的代码,很难说。)
如果Theirs\Package\Configuration
真的打算与Theirs\TheirTrait\Configration
一起使用,您应该将它们写成错误报告。否则,我想应该有一些关于如何在代码中使用类和特性的文档,这样它们就不会产生错误。