isset可以接受多个参数。
如果提供了多个参数,则仅当设置了所有参数时 isset() 才会返回 TRUE。
由于这与您想要的相反,因此需要一个简单的否定:
!isset($x, $y, $z, $w)
另一个好处是它isset
不是常规函数,不会对未定义的变量发出任何通知。
从变量中获取名称更难。您将需要以某种方式检查它们中的每一个。我认为最好和最具可扩展性的解决方案是使用关联数组,以变量名作为键:
function any_null(array $a){
foreach($a as $k => $v) if ($v === null) return $k;
return false;
}
any_null(array('x' => $x, 'y' => $y));
注意严格比较 ( ===
)。否则false
, ""
,0
和array()
也将被视为“null”。
另一种解决方案是只传递变量的名称并使用$GLOBALS数组。在这里,我将它与对func_get_args的调用相结合,以获得更简洁的调用约定:
function any_null(){
$a = func_get_args();
foreach($a as $k) if (!isset($GLOBALS[$k])) return $k;
return false;
}
any_null('x', 'y', 'z');
不过,最后一个解决方案有很多缺点。您只能测试全局范围内的变量,并且只能测试标准变量(不能测试数组中的元素,不能测试对象等)。那些的语法会很笨拙。