多空检查

时间:2012-06-24 09:03:35

标签: php

是否有更高效,更清洁和更短的表格:

if($x==null or $y==null or $z==null or $w==null) return true;

一般来说,如何获取空变量的名称?

function any_null(array $a){
    foreach($a as $v) if ($v==null) return //variable name;
    return false;
}
var_dump(any_null(array($x,$y,$z,$w)));

1 个答案:

答案 0 :(得分:9)

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""0array()也将被视为“空”。

另一个解决方案是传递变量的名称并使用$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');

这最后的解决方案有很多缺点。您只能测试全局范围内的变量,并且只能测试标准变量(不是数组中的元素,而不是对象等)。那些语法非常笨重。