Hack - 如何检查实例是否使用Trait?

时间:2017-12-22 03:06:10

标签: php hacklang

如何检查类的实例是否使用特征?我无法使用instanceof,因为Trait是不可取消的。

2 个答案:

答案 0 :(得分:4)

您可以将ReflectionObjectgetTraitsgetTraitNames函数结合使用:

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
}