这2个表达式是否相等(我的意思是“我可以用第二个替换第一个)吗?
if ($var) { ... }
和
if (!empty($var)) { ... }
我觉得有区别,但是我不能理性地说出哪一个。
对我来说,第一个评估$ var是true还是false,但我可能错了,但是“ false”评估意味着$ var是false(布尔值),空(字符串,对象或数组),0值(int,浮点数或字符串)或未定义...就是“空”函数的工作方式(http://php.net/manual/en/function.empty.php)。
如果这些测试是等效的(至少在特定情况下),那么使用哪个更好(可读性,性能,维护性……)?
谢谢
答案 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