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

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

当前回答

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

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

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

其他回答

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

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

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

$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网站,引用empty()函数:

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

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

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

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

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

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

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

那么我们就不应该用了

isset($_POST['edit_id'])

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

!empty($_POST['edit_id'])

这完全是多余的。Empty或多或少是!isset($foo) || !$foo的简写,并且! Empty类似于isset($foo) && $foo。也就是说,empty做的事情与isset相反,加上对值的真实性的额外检查。

或者换句话说,empty与!$foo相同,但如果变量不存在,则不会抛出警告。这就是这个函数的要点:做一个布尔比较,而不用担心变量被设置。

手册是这样写的:

Empty()与(boolean) var相反,除了在未设置变量时不会生成警告。

你可以在这里简单地使用!empty($vars[1])。