如何检查类的实例是否使用特征?我无法使用instanceof
,因为Trait是不可取消的。
答案 0 :(得分:4)
您可以将ReflectionObject与getTraits或getTraitNames函数结合使用:
trait test {
public function hello()
{
echo "hello";
}
}
class A {
use test;
}
function hasTrait($object, $traitName)
{
$reflection = new ReflectionObject($object);
return in_array($traitName, $reflection->getTraitNames());
}
$a = new A();
if(hasTrait($a, 'test')) {
echo "Object of class 'A' has 'test' trait \n";
}
答案 1 :(得分:3)
Hack是一套超级PHP(也是一个子集,因为删除了一些遗留的东西),所以可以使用大多数原生函数。
话虽如此,你有class_uses()功能,可以做你想要的。
这是一个简化的用例:
if (in_array(\Foo\Bar::class, class_uses($object))) {
// Do something if $object is using \Foo\Bar trait
}