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

isset($vars[1]) AND !empty($vars[1])

当前回答

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

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

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

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

如果var存在,返回TRUE;否则错误。

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

其他回答

这是不必要的。

如果变量不存在,则不生成警告。这意味着 Empty()本质上相当于!isset($var) || $var = = false。

php.net

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

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

那么我们就不应该用了

isset($_POST['edit_id'])

Bcoz edit_id是一直设置,无论是添加或编辑页面,而不是我们应该使用check下面的条件

!empty($_POST['edit_id'])

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

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

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

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

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

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

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

* ""(空字符串) * 0(0为整数) * "0"(0作为字符串) *空 *假 * array()(空数组) * var $var;(声明了一个变量,但在类中没有值)

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