Я пытаюсь запустить две функции из двух отдельных черт, которые будут применяться в одном классе, но последовательно одна добавляется к другой. Ниже показан простой пример.
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();
Все мои поиски в Google по этой проблеме просто показывают, как использовать insteadof для перезаписи одного другим.
Редактировать:
Этот вопрос не является дубликатом указанного. При запуске кода с предписанными изменениями получаю
Fatal error: Trait method get has not been applied, because there are collisions with other trait methods on GetUser in /in/hg9ok on line 20
Process exited with code 255.
Спасибо
Не совсем уверен насчет дубликата, но он может указать вам, как получить доступ к обоим методам.
Вам следует начать с чтения руководства: php.net/manual/en/language.oop5.traits.php. После названия признака нет (). Код, который вы разместили не компилируется из-за этих скобок.






По сути, нет, вы не можете достичь того, что описываете. Техническая причина заключается в том, что вы получите фатальную ошибку, если попытаетесь использовать несколько трейтов с одинаковыми именами методов (см. Часть «Разрешение конфликтов» в документация), и вы не сможете выборочно получить доступ к методу из трейта. (т.е. UserLevel::get), но на самом деле это либо недоразумение, либо неправильное использование свойств.
Черты существуют для горизонтальной композиции функциональности, и ключевая часть вашего примера, которая указывает, что это не так, - это черта "SpecialUser". Если это действительно особый пользователь, то почему он не является подклассом «Пользователь» с описываемой вами функциональностью, а не характеристикой?
Это вопрос того, чего вы здесь пытаетесь достичь - не с точки зрения кода, а более целостного - и применения ООП к этому, а не того, что, кажется, происходит здесь, а это наоборот.
Возможный дубликат Как переопределить функцию черты и вызвать ее из переопределенной функции?