以下是否有更高效,更清洁和更短的形式:
if($x==null or $y==null or $z==null or $w==null) return true;
Run Code Online (Sandbox Code Playgroud)
一般来说,我如何获得空变量的名称?
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)));
Run Code Online (Sandbox Code Playgroud)
isset可以采用多个参数.
如果提供了多个参数,则只有在设置了所有参数后,isset()才会返回TRUE.
由于这与您想要的相反,因此需要简单的否定:
!isset($x, $y, $z, $w)
Run Code Online (Sandbox Code Playgroud)
另一个好处是,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));
Run Code Online (Sandbox Code Playgroud)
注意严格的比较(===).否则false,"",0和array()将被算作"空"的可能.
另一种解决方案是仅传递变量的名称并使用$ 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');
Run Code Online (Sandbox Code Playgroud)
最后一个解决方案有很多缺点.您只能测试全局范围内的变量,并且只能测试标准变量(不是数组中的元素,而不是对象等).那些语法非常笨重.
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |