是否有更有效、更清洁和更短的表格供下列用途:
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)));发布于 2012-06-24 09:06:54
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数组。在这里,我将它与对参数的调用结合在一起,以获得更少冗长的调用约定:
function any_null(){
$a = func_get_args();
foreach($a as $k) if (!isset($GLOBALS[$k])) return $k;
return false;
}
any_null('x', 'y', 'z');不过,最后一种解决方案有很多缺点。您只能测试全局范围中的变量,并且只能测试标准变量(不是数组中的元素,也不能测试对象等等)。这些语法将非常笨拙。
https://stackoverflow.com/questions/11176203
复制相似问题