Answers:
这是完全多余的。empty
或多或少简写!isset($foo) || !$foo
,并且!empty
是类似于isset($foo) && $foo
。即empty
做相反的事情,isset
再加上一个额外的检查值的真实性。
换句话说,empty
与相同!$foo
,但是如果变量不存在,则不会发出警告。这就是该功能的重点:进行布尔比较,而不必担心设置变量。
手册说得像这样:
empty()
与的相反(boolean) var
,只是未设置变量时不生成警告。
您可以!empty($vars[1])
在这里简单地使用。
$vars[1]
他会收到通知。
empty
是PHP中最容易被误解的函数之一。关于“不生成警告”的小片段非常容易被忽略。我不得不自己扫描文档几次,以将其发布到此处。
empty($vars[1])
不会引起任何警告,即使$vars[1]
未设置,但echo $vars[1]
也会。我使用检查了事实echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
。
0
视为false
。PHP不是唯一的一个。仍然不确定您的投诉是什么。
isset()
测试是否设置了变量并且不为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()不等于!empty()。
如果沿着这条路线走,您将创建一些令人不快且难以调试的错误。例如,尝试运行以下代码:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
isset
等同于!empty
。
$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';
}
如果只检查php doc(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上检查变量isset而不是null是否可以在php doc(isset)中找到
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");
未定义的变量必须在函数外部求值,因为函数本身会在范围内创建临时变量。
“空”:仅适用于变量。空对于不同的变量类型可能意味着不同的事情(请查看手册:http : //php.net/manual/en/function.empty.php)。
“ isset”:检查变量是否存在,并检查真NULL或false值。可以通过调用“未设置”来取消设置。再次检查手册。
是否使用其中一个取决于您使用的变量类型。
我想说,检查这两者是比较安全的,因为首先要检查的是变量是否存在,以及它是否不是NULL或为空。
如果我们使用同一页面通过“提交”按钮添加/编辑,如下所示
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
那么我们不应该使用
isset($_POST['edit_id'])
bcoz edit_id
一直设置为添加页面还是编辑页面,我们应该在以下条件下使用check
!empty($_POST['edit_id'])