2016-09-22 141 views
2

一个学习PHP的人给了我一些让我挠头的代码。他越来越$_POST输入,将它放在变量,然后:empty()如何处理布尔表达式?

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

我的第一个倾向是,通过多个变量作为自变量将抛出一个错误,但它成功地计算。我不正确empty()不应该采取布尔表达式?或者 - 如果我是对的 - 它为什么会起作用?

+0

从5.5开始,'empty'可以接受一个表达式而不仅仅是一个变量,但这仍然是编写该代码的一种非常奇怪的方式。 – iainn

+1

这与'if($ id && $ name && $ email)' – AbraCadaver

+0

@iainn相同谢谢 - 我没有意识到更新[empty()支持任意表达式](http://php.net/manual/ EN/migration55.new-features.php)。你也是对的,这很奇怪!我不是唯一指出他是非常规的。 – lookdad

回答

3

可以传递一个表达式empty,而不是一个变量(自PHP 5.5),但像你失去使用empty的利益半表达。 empty检查变量是否设置以及评估其“真实性”。当你给它一个这样的表达式时,表达式中的单个变量是而不是检查存在empty。该表达式仅作为布尔值进行计算。

所以,如果你使用的不同empty检查,你会得到检查存在变数以及检查,他们是!= false

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

但是当你使用

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

你会如果所有变量都已设置并且具有非假值,则仍然进入if块,但如果未设置任何变量,则会得到未定义的变量通知。它基本上不使用empty可言,这样同样的事情:

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

但是,如果你的男人是从$_POST设置这些变量,他们设置,(如果他们在$_POST没有他” d那时得到未定义的索引警告),而且这里的empty毫无意义。