Цепной один и тот же метод в нескольких составных чертах - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь запустить две функции из двух отдельных черт, которые будут применяться в одном классе, но последовательно одно добавление к другому.Простой пример приведен ниже

trait UserLevel{
    public function get(){
        echo 'World';
    }
}

trait SpecialUser{
    use UserLevel {
        UserLevel::get as userGet;
    }

     public function get(){

         echo 'Hello ';
         $this->userGet();
     }
}

Class GetUser{
    use UserLevel, SpecialUser;
}

$user = new GetUser;
$user->get(); 

Все мои поиски по этому вопросу просто показывают, как использовать insteadof для перезаписи одного на другое.

Редактировать:

Этот вопрос не является дубликатом упомянутого вопроса.При запуске кода с заданными изменениями я получаю

Неустранимая ошибка: метод trait get не был применен, потому что есть конфликты с другими методами trait в GetUser в / in / hg9ok в строке 20

Процесс завершен с кодом 255.

Спасибо

1 Ответ

0 голосов
/ 07 июня 2018

Принципиально нет, вы не можете достичь того, что вы описываете.Техническая причина в том, что вы получите фатальную ошибку, если попытаетесь использовать более одной черты с одинаковыми именами методов (см. Раздел «Разрешение конфликтов» в документации ) и не сможете получить выборочный доступметод из черты (то есть UserLevel::get), но на самом деле это либо недоразумение, либо неправильное использование черт.

Черты существуют для горизонтальной композиции функциональности и ключевой части вашего примера, которая указывает на это.дело в особенности «SpecialUser».Если это действительно особый пользователь, то почему это не подкласс «Пользователь» с функциональностью, которую вы описываете, а не черта?

Вопрос в том, чего вы пытаетесь достичь здесь -не с точки зрения кода, а более целостно - и применяя ООП к этому, а не к тому, что, кажется, происходит здесь, а наоборот.

...