isset
和!empty
之间是否有区别?如果我做这个双布尔检查,这种方式是正确的还是多余的?是否有更短的方法来做同样的事情?
isset($vars[1]) AND !empty($vars[1])
答案 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) . "'";
?>
答案 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)
答案 9 :(得分:0)
empty()
功能:如果FALSE
具有非空和非零值,则返回var
。
知道这是件好事。换句话说,使用NULL
函数时,从0
到TRUE
到“”的所有内容都会返回empty()
。
isset()
函数返回的描述:如果TRUE
存在,则返回var
;否则FALSE
。
换句话说,只有不存在的变量(或具有严格NULL
值的变量)才会在FALSE
函数上返回isset()
。所有具有任何类型值的变量,无论是0
,空白文本字符串等,都将返回TRUE
。