多个实例检查

时间:2012-05-29 15:58:33

标签: php instanceof

是否有更短的方法来检查对象是否属于某组类的一部分?

使用instanceof使IF语句太长: if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3....)

这不起作用: instance of \Class1 || \Class2 || \Class3

它假设Class2是常数..

3 个答案:

答案 0 :(得分:7)

简而言之:否

答案越长:您可以创建变通方法,使用get_parent_class()递归来获取所有父类,然后使用array_intersect()查找是否有一个或多个类名出现在那里。然而,似乎他们的课程应该有一些共同之处。把它放到一个接口进行测试。

答案 1 :(得分:7)

  

使IF语句太长

     

[...]

     

是否有更短的方式

不确定。

只需创建一个功能

function isOfValidClass($obj)
{
    $classNames = array('Class1', 'Class2');
    foreach ($classNames as $className) {
        if (is_a($obj, $className)) {
        return true;
    }

    return false;
}

然后你可以在你的代码中使用它,而不必担心你的if语句“占用太多空间”(并不是说你应该考虑这个问题;语句应该只要它们需要)。< / p>

答案 2 :(得分:1)

我认为,最简单的方法是将布尔表达式放在外部方法中并将其调用到IF语句中。