首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多零检验

多零检验
EN

Stack Overflow用户
提问于 2012-06-24 09:03:34
回答 1查看 68关注 0票数 0

是否有更有效、更清洁和更短的表格供下列用途:

代码语言:javascript
复制
if($x==null or $y==null or $z==null or $w==null) return true;

通常情况下,如何也能获得空变量的名称?

代码语言:javascript
复制
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)));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-24 09:06:54

isset可以使用多个参数。

如果提供了多个参数,那么isset()只有在设置了所有参数时才会返回TRUE。

因为这与你想要的正好相反,所以需要一个简单的否定:

代码语言:javascript
复制
!isset($x, $y, $z, $w)

另一个额外的好处是,isset不是一个常规函数,不会引起任何关于未定义变量的注意。

很难从变量中获得名称。你需要以某种方式检查其中的每一个。我认为最好和最可伸缩的解决方案是使用一个以变量的名称作为键的关联数组:

代码语言:javascript
复制
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()也将被计算为"null“。

另一种解决方案是只传递变量的名称并使用$GLOBALS数组。在这里,我将它与对参数的调用结合在一起,以获得更少冗长的调用约定:

代码语言:javascript
复制
function any_null(){
    $a = func_get_args();
    foreach($a as $k) if (!isset($GLOBALS[$k])) return $k;
    return false;
}
any_null('x', 'y', 'z');

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11176203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档