Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php empty()如何处理布尔表达式?_Php - Fatal编程技术网

Php empty()如何处理布尔表达式?

Php empty()如何处理布尔表达式?,php,Php,一个学习PHP的家伙给我发了一些让我抓狂的代码。他得到了$\u POST输入,将其放入变量中,然后: if( !empty($id && $name && $email) ) { //do something } 我的第一个倾向是将多个变量作为参数传递会抛出错误,但它的计算结果是成功的。empty()不应该采用布尔表达式,这是不是不正确?或者-如果我是对的-它为什么工作?您可以将表达式传递给empty,而不是变量(从PHP 5.5开始),但是使用这样的表

一个学习PHP的家伙给我发了一些让我抓狂的代码。他得到了
$\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谢谢-我不知道这个更新。你说得对,这很奇怪!这不是我向他指出的唯一一件非传统的事情。