有没有之间的差异isset和!empty.如果我做这个双布尔检查,这种方式是正确的还是多余的?有没有更短的方法来做同样的事情?
isset($vars[1]) AND !empty($vars[1])
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 402
这完全是多余的.empty或多或少是简写!isset($foo) || !$foo,并且!empty类似于isset($foo) && $foo.即empty做相反的事情isset加上额外的检查值的真实性.
或者换句话说,如果变量不存在,empty则相同!$foo,但不会发出警告.这是此函数的要点:进行布尔比较而不必担心设置的变量.
手册如下:
empty()与之相反(boolean) var,除了未设置变量时不会生成警告.
你可以!empty($vars[1])在这里使用.
Gre*_*att 31
isset() 测试变量是否设置且不为null:
http://us.php.net/manual/en/function.isset.php
empty() 当变量设置为某些值时,可以返回true:
http://us.php.net/manual/en/function.empty.php
要演示这一点,请尝试使用$ the_var unassigned,设置为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";
}
?>
Run Code Online (Sandbox Code Playgroud)
Sno*_*ash 14
接受的答案是不正确的.
isset()不等于!empty().
如果沿着这条路走下去,你会创建一些相当不愉快且难以调试的错误.例如,尝试运行此代码:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
Run Code Online (Sandbox Code Playgroud)
$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';
}
Run Code Online (Sandbox Code Playgroud)
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 |
+-----------+---------+---------+----------+---------------------+
Run Code Online (Sandbox Code Playgroud)
和代码
$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");
Run Code Online (Sandbox Code Playgroud)
未定义的变量必须在函数外求值,因为函数本身在作用域内创建临时变量。
| 归档时间: |
|
| 查看次数: |
196567 次 |
| 最近记录: |