Можно ли обойти метод трейта в PHP? - PullRequest
2 голосов
/ 26 мая 2020

У меня есть основной базовый класс:

class BaseClass
{
    public function process()
    {
        echo 'Base::process()';
    }
}

и черта:

trait ProtectionTrait
{
    public function process()
    {
        echo 'ProtectionTrait::process()';
    }
}

Затем я создаю класс, расширяющий BaseClass и использующий ProtectionTrait с изменением имени его метода process() на другое:

class ChildClass extends BaseClass
{
    use ProtectionTrait {
        process as omittedProcess;
    }
}

Я бы хотел обойти метод ProtectionTrait :: process (), изменив его имя (как указано выше), но похоже, что он не работает:

$obj = new ChildClass();
$obj->process();
// outputs 'ProtectionTrait::process()'

Можно ли обойти выбранный метод из трейта, поэтому будет вызван метод родительского класса? Я знаю, что могу поместить метод process() в ChildClass и вызвать там parent::process() вручную, но можно ли сделать это по-другому?

...