【发布时间】:2019-03-13 13:58:36
【问题描述】:
我注意到一些我无法对自己解释的事情。我需要一点帮助来检查继承的类是否使用特定特征。为了更清楚一点,我使用以下代码。
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');
上面的例子呼应了你好。所以 trait 继承成功,可以从 B 类中使用。
$used = class_uses($b);
var_dump($used);
令人惊讶的是,这会输出一个空数组。我预计,class_uses 会给我类似Foo 的东西。但事实并非如此。
$reflection = new ReflectionClass('B');
$uses = $reflection->getTraits();
var_dump($uses);
这里也有同样的期望。但它只是输出一个空数组。
为什么在继承的类 B 中看不到来自类 A 的 used trait?有没有办法解决这个问题?
【问题讨论】:
-
对于这两种方法,页面上都有 cmets,它们不显示父类的特征。
-
还有更多 - 在
class_uses的 cmets 部分,有一个解决方案可以获取所有特征。但是谁读 cmets。 -
好吧,现在有点尴尬。感谢您的提示。我想我在这里有点失明。
标签: php oop inheritance traits