为什么同时检查isset()和!empty()

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

isset($vars[1]) AND !empty($vars[1])
229557 次浏览

isset()测试变量是否被设置且不为空:

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";
}
?>

空只是检查是引用的变量/数组有一个值,如果你检查php文档(空的),你会看到这个东西被认为是空的

* "" (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)

while isset检查变量是否为set而不是null,这也可以在php文档(收取)中找到

"Empty":只对变量有效。对于不同的变量类型,空可以有不同的含义 (检查手册:http://php.net/manual/en/function.empty.php).

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

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

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

这完全是多余的。empty或多或少是!isset($foo) || !$foo的缩写,而!empty类似于isset($foo) && $foo。例如,empty做了与isset相反的事情,加上对值的真实与否的额外检查。

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

手动是这样写的:

empty()(boolean) var除非没有设置变量,否则不会产生警告。的反义词

你可以在这里简单地使用!empty($vars[1])

$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';
}

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

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

那么我们就不应该用了

isset($_POST['edit_id'])

bcoz edit_id是一直设置的,无论是添加还是编辑页面,相反,我们应该使用check below condition

!empty($_POST['edit_id'])

这是不必要的。

如果变量不存在,则不产生警告。这意味着< >强 Empty()本质上是等价于!isset($var) || $var = = false。< / p >

php.net .net

公认的答案不正确。

isset()是等价于!empty()。

如果沿着这条路走下去,您将会产生一些相当令人不快且难以调试的错误。例如,试着运行下面的代码:

<?php


$s = '';


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


?>

https://3v4l.org/J4nBb

  • 从PHP网站,引用empty()函数:

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

知道这一点是件好事。换句话说,在使用empty()函数时,从NULL0到" "的所有内容都将返回TRUE

  • 下面是isset()函数返回内容的描述:

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

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

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");

未定义变量必须在函数外部求值,因为函数本身在作用域中创建临时变量。