为什么要检查isset()和!empty()

时间:2010-12-30 04:08:40

标签: php

isset!empty之间是否有区别?如果我做这个双布尔检查,这种方式是正确的还是多余的?是否有更短的方法来做同样的事情?

isset($vars[1]) AND !empty($vars[1])

10 个答案:

答案 0 :(得分:389)

这完全是多余的。 empty或多或少是!isset($foo) || !$foo的简写,!empty类似于isset($foo) && $foo。即empty执行与isset相反的操作,并额外检查值的真实性

或者换句话说,empty!$foo相同,但如果变量不存在则不会发出警告。这是这个函数的要点:做一个布尔比较而不用担心变量被设置。

The manual这样说:

  

empty()(boolean) var 相反,但未设置变量时不会生成警告。

您可以在这里使用!empty($vars[1])

答案 1 :(得分:30)

isset()测试是否设置了变量而不是null:

http://us.php.net/manual/en/function.isset.php

当变量设置为特定值时,

empty()可以返回true:

http://us.php.net/manual/en/function.empty.php

为了演示这一点,请尝试使用以下代码,将$ the_var取消分配,设置为0,并设置为1.

<?php

#$the_var = 0;

if (isset($the_var)) {
  echo "set";
} else {
  echo "not set";
}

echo "\n";

if (empty($the_var)) {
  echo "empty";
} else {
  echo "not empty";
}
?>

答案 2 :(得分:12)

接受的答案不正确。

isset() NOT 等同于!empty()。

如果沿着这条路走下去,你会创建一些相当不愉快且难以调试的错误。例如尝试运行此代码:

<?php

$s = '';

print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";

?>

https://3v4l.org/J4nBb

答案 3 :(得分:8)

$a = 0;
if (isset($a)) { //$a is set because it has some value ,eg:0
    echo '$a has value';
}
if (!empty($a)) { //$a is empty because it has value 0
    echo '$a is not empty';
} else {
    echo '$a is empty';
}

答案 4 :(得分:5)

isset($vars[1]) AND !empty($vars[1])等效于!empty($vars[1])

我准备了简单的代码来凭经验进行展示。

最后一行是未定义的变量。

+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| ''        | true    | true    | false    | false               |
| ' '       | false   | true    | true     | true                |
| false     | true    | true    | false    | false               |
| true      | false   | true    | true     | true                |
| array ()  | true    | true    | false    | false               |
| NULL      | true    | false   | false    | false               |
| '0'       | true    | true    | false    | false               |
| 0         | true    | true    | false    | false               |
| 0.0       | true    | true    | false    | false               |
| undefined | true    | false   | false    | false               |
+-----------+---------+---------+----------+---------------------+

和代码

$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;

function compare($var)
{
    print(var_export($var, true) . "|" .
        var_export(empty($var), true) . "|" .
        var_export(isset($var), true) . "|" .
        var_export(!empty($var), true) . "|" .
        var_export(isset($var) && !empty($var), true) . "\n");
}

for ($i = 1; $i <= 9; $i++) {
    $var = 'var' . $i;
    compare($$var);
}

@print(var_export($var10, true) . "|" .
    var_export(empty($var10), true) . "|" .
    var_export(isset($var10), true) . "|" .
    var_export(!empty($var10), true) . "|" .
    var_export(isset($var10) && !empty($var10), true) . "\n");

未定义的变量必须在函数外部求值,因为函数本身会在范围内创建临时变量。

答案 5 :(得分:3)

空的只是检查提到的变量/数组是否有值如果你检查php doc(empty)你会看到这些东西被认为是emtpy

* "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)

而isset检查变量是否设置而不是null,这也可以在php doc(isset)

中找到

答案 6 :(得分:0)

“空”:仅适用于变量。空可以表示不同变量类型的不同内容 (查看手册:http://php.net/manual/en/function.empty.php)。

“isset”:检查变量是否存在并检查true NULL或false值。 可以通过调用“unset”取消设置。再次查看手册。

使用任何一个取决于您使用的变量类型。

我想说,检查两者都更安全,因为如果变量存在,首先检查它是否存在,以及它是否真的为NULL或空。

答案 7 :(得分:0)

如果我们使用相同的页面通过提交按钮添加/编辑,如下所示

<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">

然后我们不应该使用

isset($_POST['edit_id'])

bcoz edit_id始终设置是添加还是编辑页面,而不是我们应该使用以下条件检查

!empty($_POST['edit_id'])

答案 8 :(得分:0)

没有必要。

  

如果变量不存在,则不会生成警告。 这意味着   empty()基本上是!isset($ var) ||的简洁等价物$ VAR   == false。

php.net

答案 9 :(得分:0)

  • 在PHP网站上,参考empty()功能:

如果FALSE具有非空和非零值,则返回var

知道这是件好事。换句话说,使用NULL函数时,从0TRUE到“”的所有内容都会返回empty()

  • 以下是isset()函数返回的描述:

如果TRUE存在,则返回var;否则FALSE

换句话说,只有不存在的变量(或具有严格NULL值的变量)才会在FALSE函数上返回isset()。所有具有任何类型值的变量,无论是0,空白文本字符串等,都将返回TRUE