У меня есть класс, который расширяет другой класс и использует черту.Вызов собственного метода из признака
class A extends ABase
{
use MyTrait;
//...
}
расширенного класса (ABase
) расширяет другой класс (ABase2
), который расширяет абстрактный класс (ABase3
).
При создании класса A
конструктор признаков выполняется потому, что конструктор не определен в A
. В то же время конструктор признаков вызывает метод (configureOptions
), который определен в признаке, но также и в абстрактном классе ABase3
с той же видимостью (защищенной).
trait MyTrait
{
public function __construct($options)
{
//...
$this->configureOptions($resolver);
//...
}
protected function configureOptions($resolver)
{
// Define options
}
}
То, что я не понимаю, что когда configureOptions
вызывается из признака, метод выполняется не метод, определенный в черте, но один определенный в абстрактном классе (ABase3
).
Как PHP docs говорит: Унаследованный элемент из базового класса переопределяется членом, вставленным в Trait. Порядок приоритета состоит в том, что члены из текущего класса переопределяют методы Trait, которые, в свою очередь, переопределяют унаследованные методы.
Ничего не говорит о вызовах методов из одного и того же признака, но не должен сначала проверять методы внутри его собственного класса?
Edit:
не только абстрактный класс (ABase3
) имеет метод configureOptions
, но и класс, но опять-таки, метод вызывается из признака следует назвать собственный метод класса. Не так ли?