isset
和!empty
之间有什么区别。如果我进行这个双布尔检查,这样做是正确的还是多余的?有没有更短的方法来做同样的事情?
isset($vars[1]) AND !empty($vars[1])
isset
和!empty
之间有什么区别。如果我进行这个双布尔检查,这样做是正确的还是多余的?有没有更短的方法来做同样的事情?
isset($vars[1]) AND !empty($vars[1])
这是完全冗余的。 empty
或多或少就是 !isset($foo) || !$foo
的简写,而 !empty
相当于 isset($foo) && $foo
。也就是说,empty
做的是和 isset
相反的事情,并且额外检查一个值的真实性。
换句话说,empty
和 !$foo
是一样的,但如果变量不存在,它不会抛出警告。这个函数的主要目的是进行布尔比较,而不必担心变量是否设置。
手册 这样描述:
empty()
是(boolean) var
的相反,除了当变量未设置时不会生成警告。
你可以在这里简单地使用 !empty($vars[1])
。
$vars[1]
,他会收到一条通知。 - karim790
是一个假值,这是你必须注意的,不仅仅是 empty
函数会这样处理。 - deceze0
视为 false
。PHP 并不是唯一的这样做的语言。我仍然不确定你的抱怨是什么。 - decezeisset()
函数用于测试变量是否已设置并且不为null:
http://us.php.net/manual/zh/function.isset.php
empty()
函数在变量被设置为某些值时可能返回true:
http://us.php.net/manual/zh/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";
}
?>
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");
未定义的变量必须在函数外部进行评估,因为函数本身会在其作用域中创建临时变量。
isset() 不等同于 !empty()。
如果你选择这条路线,你将会遇到一些非常不愉快且难以调试的错误。例如,尝试运行以下代码:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
isset
等同于 !empty
。 - deceze$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';
}
Empty函数仅检查所引用的变量/数组是否具有值。如果您查看php文档(empty),您会发现这些内容被视为空。
* "" (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文档(isset)。
empty()
函数的说明:如果 var
有非空且非零值,则返回 FALSE
。
这是一个很好的知识点。换句话说,无论是从 NULL
到 0
再到“”,在使用 empty()
函数时都将返回 TRUE
。
isset()
函数返回值的描述:如果 var
存在,则返回 TRUE
;否则返回 FALSE
。
换句话说,只有不存在的变量(或具有严格的 NULL
值的变量)才会在 isset()
函数上返回 FALSE
。所有具有任何类型值的变量,无论是 0
、空文本字符串等,都将返回 TRUE
。
“Empty”:只适用于变量。对于不同类型的变量,“空”可以有不同的含义(请查阅手册:http://php.net/manual/en/function.empty.php)。
“isset”:检查变量是否存在,并检查其为真NULL或假值。可以通过调用“unset”来取消设置。再次提醒,查看手册。
使用其中任意一种取决于您正在使用的变量类型。
我认为最安全的做法是同时检查两者,因为您首先要检查变量是否存在,如果它确实不为NULL或为空。
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
那么我们就不应该使用
isset($_POST['edit_id'])
edit_id
都会被设置,所以我们应该使用以下条件检查。!empty($_POST['edit_id'])