Извините, если это дубликат, я раньше искал ответ.
Я изо всех сил пытаюсь перегрузить метод, определенный в признаке. Это порождает фатальную ошибку:
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) { // ... } }
вы можете разрешить столкновение конструктора следующим образом.
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 нет конструктора …
Похоже, что у Theirs\TheirTrait\Configration
и Theirs\Package\Configuration
есть конструктор, а подписи конструктора несовместимы. (Но без кода обоих, это трудно сказать.)
Если Theirs\Package\Configuration
Theirs\TheirTrait\Configration
В противном случае я предполагаю, что должна быть какая-то документация о том, как использовать класс и черту в коде, чтобы они не приводили к ошибкам.