if($ variable)和if(isset($ variable))之间的区别

时间:2014-05-14 20:58:58

标签: php if-statement syntax null boolean

这样的事情之间有什么区别:

if(isset($variable)) { 

  do_something(); 

}

和这个

if($variable) { 

  do_something(); 

}

我想说第一种情况,isset检查变量是否存在且不为空。但是,如果将它设置为空数组怎么办?

在第二种情况下,我想说如果变量已经被实例化,它将传递为true。

感谢您今后的任何澄清。

3 个答案:

答案 0 :(得分:3)

if(isset($variable))

检查变量是否存在并设置(与NULL不同)。

if($variable)

只检查变量发回的布尔值,在本例中为

if($variable === true)

答案 1 :(得分:1)

Isset是设置或不设置变量的天气条件。这不包括“null”,如手册中所述:

  

isset - 确定变量是否已设置且不为NULL   http://uk1.php.net/manual/en/function.isset.php

$var = null;
if (isset($var)) {
    echo 'Hello World';
}

不会输出任何内容,因为null未定义为已设置。

$var = false;
if (isset($var)) {
    echo 'Hello World';
}

输出为'Hello World',因为$ var已设置,boolean无关紧要。

$var = null;
if ($var) {
    echo 'Hello World';
}

什么都不输出,因为$ var为null,而null不为true。同样如果$ var = false,我认为这是一个给定的。

这适用于动态生成的数组

$array = array('hello' => 'world');
if (isset($array['hello'])) {
    echo 'hello is set';
}

if (isset($array['world'])) {
    echo 'world is set';
}

只有'你好'设置'会回应。这意味着您可以使用1行显着减少php通知:

$var = isset($_GET['var']) ? trim($_GET['var') : null;

即使某些东西是空的,isset也会返回true,

$array = array();
if (isset($array)) {
    echo 'yep, array is set!';
}

所以不要用它来检查空,改为执行empty(),或者在大多数情况下你甚至可以做if($ var),即使对于空数组,空数组= false。

答案 2 :(得分:0)

isset函数检查是否已定义变量。它在空数组上返回true。使用empty检查数组是否为空(如果未定义变量,则返回false)。

简单地调用if($variable)检查它是否具有true返回值(尽管不一定是布尔值),如果尚未定义,可能会引发错误。