PHP-使用哪个条件测试?

时间:2019-01-21 11:15:53

标签: php if-statement

这2个表达式是否相等(我的意思是“我可以用第二个替换第一个)吗?

if ($var) { ... }

if (!empty($var)) { ... }

我觉得有区别,但是我不能理性地说出哪一个。

对我来说,第一个评估$ var是true还是false,但我可能错了,但是“ false”评估意味着$ var是false(布尔值),空(字符串,对象或数组),0值(int,浮点数或字符串)或未定义...就是“空”函数的工作方式(http://php.net/manual/en/function.empty.php)。

如果这些测试是等效的(至少在特定情况下),那么使用哪个更好(可读性,性能,维护性……)?

谢谢

3 个答案:

答案 0 :(得分:4)

它们的不同之处在于第二个示例,在使用$var之前不必进行设置。在第一种情况下,如果未设置$var,则将生成通知,而在第二种示例中,则不会生成通知。

这对于用户在$_GET$_POST超全局变量(..以及$_COOKIE$_SERVER中)提交的值很有用。

// will generate a notice if there is no `foo` in the query string
if ($_GET['foo'])

// will not generate a notice, even if the key is not set
if (!empty($_GET['foo']))

答案 1 :(得分:1)

!empty($var)

确定变量是否被认为不为空。如果变量does exist或它的值等于TRUE,则认为该变量不为空。如果变量不存在, empty()不会生成警告。

if ($var) { ... }

您将测试$ var是否包含不为false的值-1为true,123也为

额外:

isset($var)

使用isset(),您将测试是否设置了变量-即是否已将任何非空值写入其中。

-

这完全取决于您要检查/测试的内容。我希望它会有所帮助。

答案 2 :(得分:1)

empty()->如果变量不存在或等于false,则空函数返回true。

想象一下您没有声明$ var

if ($var) { 
    echo '1'; 
} 
else { 
    echo '2'; 
}

输出将是:

  

注意未定义变量:行号上的var *

如果您使用空:

if (!empty($var)) { 
    echo 1; 
}
else { 
    echo 2; 
}

输出将是:

  

2

以下值也被认为是空的

$var = 0;
$var = "";
$var = false;
$var = null;

还要检查isset()函数Php.net isset