empty()如何使用布尔表达式?

时间:2016-09-22 14:31:13

标签: php

一个学习PHP的家伙给我发了一些令我挠头的代码。他得到$_POST输入,把它放在变量中,然后:

if( !empty($id && $name && $email) ) {
    //do something
}

我的第一个倾向是将多个变量作为参数传递会引发错误,但它会成功评估。我不正确empty()不应该采用布尔表达式吗?或者 - 如果我是对的 - 为什么它会起作用?

1 个答案:

答案 0 :(得分:3)

可以将表达式传递给empty而不是变量(从PHP 5.5开始),但是使用类似的表达式会失去使用empty的一半好处。 empty检查变量是否已设置以及评估其“真实性”。当你给它一个这样的表达式时,表达式中的各个变量被<{1}} not 检查为存在。表达式只是作为布尔值计算。

因此,如果您使用单独的empty检查,您将检查变量是否存在以及检查它们是empty

!= false

但是当你使用

if(!empty($id) && !empty($name) && !empty($email))

如果设置了所有变量并且具有非假值,您仍将进入if (!empty($id && $name && $email)) 块,但如果未设置任何变量,您将获得未定义的变量通知。它与完全不使用if基本相同,如下所示:

empty

但如果你的家伙从if ($id && $name && $email) 设置这些变量,他们设置,(如果他们不在$_POST他会得到未定义的索引警告那一点)和$_POST无论如何都是毫无意义的。