Я заметил то, что не могу объяснить самому себе. Мне нужна небольшая помощь, чтобы проверить, использует ли унаследованный класс определенную черту. Чтобы было понятнее, я использую следующий код.
trait Foo
{
public function say($what)
{
echo $what;
return $this;
}
}
class A
{
uses Foo;
}
class B extends A
{
}
Я знаю, что должен использовать метод class_uses () , чтобы найти все черты, используемые классом. Но это не работает на унаследованных экземплярах.
$b = (new B())->say('hello');
Приведенный выше пример повторяет привет. Таким образом, признак наследуется успешно и может использоваться из класса B.
$used = class_uses($b);
var_dump($used);
Удивительно, но это выводит пустой массив. Я ожидал, что class_uses даст мне что-то вроде Foo
. Но это не так.
$reflection = new ReflectionClass('B');
$uses = $reflection->getTraits();
var_dump($uses);
То же самое ожидание здесь. Но он просто выводит пустой массив.
Почему использованную черту из класса A нельзя увидеть в унаследованном классе B? Есть ли альтернативы для решения этой проблемы?