Php empty()如何处理布尔表达式?
一个学习PHP的家伙给我发了一些让我抓狂的代码。他得到了Php empty()如何处理布尔表达式?,php,Php,一个学习PHP的家伙给我发了一些让我抓狂的代码。他得到了$\u POST输入,将其放入变量中,然后: if( !empty($id && $name && $email) ) { //do something } 我的第一个倾向是将多个变量作为参数传递会抛出错误,但它的计算结果是成功的。empty()不应该采用布尔表达式,这是不是不正确?或者-如果我是对的-它为什么工作?您可以将表达式传递给empty,而不是变量(从PHP 5.5开始),但是使用这样的表
$\u POST
输入,将其放入变量中,然后:
if( !empty($id && $name && $email) ) {
//do something
}
我的第一个倾向是将多个变量作为参数传递会抛出错误,但它的计算结果是成功的。empty()
不应该采用布尔表达式,这是不是不正确?或者-如果我是对的-它为什么工作?您可以将表达式传递给empty
,而不是变量(从PHP 5.5开始),但是使用这样的表达式,您将失去使用empty
的一半好处empty
检查变量是否已设置并评估其“真实性”。当您给它这样一个表达式时,empty
不会检查表达式中的各个变量是否存在。表达式仅作为布尔值计算
因此,如果使用单独的空检查
检查,则会检查变量是否存在以及它们是否为!=错误
if(!empty($id) && !empty($name) && !empty($email))
但是当你使用
if (!empty($id && $name && $email))
如果所有变量都已设置且具有非假值,则仍将进入if
块,但如果未设置任何变量,则会收到未定义的变量通知。这与根本不使用empty
基本相同,如下所示:
if ($id && $name && $email)
但是如果你的人在
$\u POST
中设置这些变量,它们将被设置(如果它们不在$\u POST
中,他会在此时收到未定义的索引警告),并且空的无论如何都是没有意义的。从5.5开始,空的
可以采用表达式而不仅仅是变量,但这仍然是一种非常奇怪的编写代码的方式。它与if($id&&&$name&&&$email)
@iainn谢谢-我不知道这个更新。你说得对,这很奇怪!这不是我向他指出的唯一一件非传统的事情。