是否有一种更短的方法来检查一个对象是否是一组特定类的一部分?
使用instanceof
会使if
语句太长:
if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3)
这不起作用:
instance of \Class1 || \Class2 || \Class3
它假设这Class2
是恒定的。
是否有一种更短的方法来检查一个对象是否是一组特定类的一部分?
使用instanceof
会使if
语句太长:
if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3)
这不起作用:
instance of \Class1 || \Class2 || \Class3
它假设这Class2
是恒定的。
使 IF 语句太长
[...]
有没有更短的方法
当然。
只需创建一个函数:
function isOfValidClass($obj)
{
$classNames = array('Class1', 'Class2');
foreach ($classNames as $className) {
if (is_a($obj, $className)) {
return true;
}
return false;
}
然后你可以在你的代码中使用它,而不必担心你的 if 语句“占用太多空间”(不是你应该考虑这个问题;语句应该只要它们需要)。
简而言之:没有
更长的答案:您可以创建变通方法,使用get_parent_class()
递归来获取所有父类,然后用于array_intersect()
找出您的一个或多个类名是否出现在那里。但是,似乎它们的类应该有一些共同点。将此放入接口中对此进行测试。
我认为,最短的方法是将布尔表达式放在外部方法中并将其调用到 IF 语句中。