Как вызвать метод трейта из метода класса с таким же названием, чтобы не было Deprecated предупреждения?

Чтобы вызвать метод из трейта с таким же названием, как и метод класса, и при этом избежать предупреждения "Deprecated", можно использовать ключевое слово "insteadof" при импорте трейта в класс.

Например, у нас есть трейт с методом "doSomething" и класс с таким же методом. Приведу пример кода:

trait MyTrait {
   public function doSomething() {
       echo "Method from trait";
   }
}

class MyClass {
    use MyTrait {
        MyTrait::doSomething insteadof MyClass;
    }
    
    public function doSomething() {
        echo "Method from class";
    }
}

В данном примере мы использовали ключевое слово "insteadof" при импорте трейта в класс. Оно указывает, что при вызове метода "doSomething" из класса, должен использоваться метод из трейта, а не метод из класса.

Если же мы хотим вызвать метод из трейта вместо метода из класса, но при этом все равно хотим использовать метод из класса, мы можем использовать ключевое слово "as" при импорте трейта.

trait MyTrait {
   public function doSomething() {
       echo "Method from trait";
   }
}

class MyClass {
    use MyTrait {
        MyTrait::doSomething as protected traitDoSomething;
    }
    
    public function doSomething() {
        $this->traitDoSomething();
        echo "Method from class";
    }
}

В этом примере мы импортировали метод "doSomething" из трейта под псевдонимом "traitDoSomething" и вызвали его в методе класса "doSomething" при помощи "$this->traitDoSomething()". Таким образом, при вызове метода из класса будет сначала вызван метод из трейта, а затем метод из класса.