14

是否有一种更短的方法来检查一个对象是否是一组特定类的一部分?

使用instanceof会使if语句太长:

if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3)

这不起作用:

instance of \Class1 || \Class2 || \Class3

它假设这Class2是恒定的。

4

3 回答 3

9

使 IF 语句太长

[...]

有没有更短的方法

当然。

只需创建一个函数

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

    return false;
}

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

于 2012-05-29T16:15:11.500 回答
8

简而言之:没有

更长的答案:您可以创建变通方法,使用get_parent_class()递归来获取所有父类,然后用于array_intersect()找出您的一个或多个类名是否出现在那里。但是,似乎它们的类应该有一些共同点。将此放入接口中对此进行测试。

于 2012-05-29T16:02:38.073 回答
1

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

于 2012-05-29T16:01:59.820 回答