是否有更短的方法来检查对象是否属于某组类的一部分?
使用instanceof使IF语句太长:
if($obj instanceof \Class1 || $obj instanceof \Class2 || $obj instanceof \Class3....)
这不起作用:
instance of \Class1 || \Class2 || \Class3
它假设Class2是常数..
答案 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语句中。