Конфликт признаков PHP, когда класс реализует интерфейс

У меня есть класс, который реализует интерфейс для метода execute.

Интерфейс заставляет метод execute иметь два аргумента с некоторыми подсказками типа.

Также я использую трейт с методом execute, но с другой функциональностью и сигнатурой. Я изменяю имя метода типажей, используя:

class MyClass implements MyInterface {

   use MyTrait 
   {
      execute as protected commanderExecute;
   }

   public function execute(SomeInterface $arg1, SomeInterface2 $arg2)
   {
       // do something
   }

}

Когда я пытаюсь запустить приложение, оно выдает исключение Fatal error со следующим сообщением:

Метод трейта commandExecute не применялся, потому что есть коллизии с другими методами трейта на ...


person Reza Shadman    schedule 18.08.2014    source источник
comment
Невозможно воспроизвести (другой, более полезный пример: здесь )   -  person Alma Do    schedule 18.08.2014
comment
Пожалуйста, добавьте код MyTrait и MyInterface.   -  person noun    schedule 18.08.2014
comment
Не могу воспроизвести; вставка trait MyTrait {public function execute(){}} interface MyInterface{} class MyClass implements MyInterface {use MyTrait{execute as protected commanderExecute;}public function execute(){}} в оболочку PHP не вызывает ошибки.   -  person Mark Amery    schedule 15.02.2015
comment
Голосование закрыто из-за невозможности воспроизвести. Вы должны предоставить нам достаточный код, чтобы действительно вызвать сообщение об ошибке.   -  person Mark Amery    schedule 15.02.2015
comment
@AlmaDo Обе ваши ссылки ведут на программы приветствия для меня.   -  person Mark Amery    schedule 15.02.2015
comment
Сработало: 3v4l.org/K86Bt Класс может перезаписывать метод в трейте. Если у вас все еще есть ошибка, вам нужно больше сообщения об ошибке, чтобы указать, с каким execute()/commanderExecute() происходит столкновение.   -  person Fwolf    schedule 20.03.2015


Ответы (1)


Попробуй это:

class MyClass implements MyInterface {

    use MyTrait 
    {
        MyTrait::execute as protected commanderExecute;
    }

    public function execute(SomeInterface $arg1, SomeInterface2 $arg2)
    {
        // do something
    }

}
person lshas    schedule 27.08.2014