PHP isset() 和 empty() 区别
这两个函数在PHP编程中经常用于检查变量是否已设置或是否为空,但它们各自的用途和行为有所不同。
isset() 函数
isset()
函数用于检测变量是否已设置并且非NULL。如果指定变量存在并且值不是NULL,则返回true;否则返回false。这个函数可以检查一个或多个变量,如果是多个变量,则只有当所有指定的变量都已设置且不为NULL时,才返回true。
语法
bool isset ( mixed $var [, mixed $... ] )
示例
$var = '';
if (isset($var)) {
echo '$var is set and is not NULL.';
} else {
echo '$var is not set or is NULL.';
}
// 输出: $var is set and is not NULL.
$anotherVar;
if (isset($anotherVar)) {
echo '$anotherVar is set and is not NULL.';
} else {
echo '$anotherVar is not set or is NULL.';
}
// 输出: $anotherVar is not set or is NULL.
empty() 函数
empty()
函数用于检查一个变量是否为空。这里的“空”指的是变量不存在,或者变量的值等同于FALSE。也就是说,如果变量不存在,或者其值为0、'0'、""(空字符串)、NULL、FALSE、array()(一个空数组),或者是一个没有任何属性的对象,那么empty()
函数将返回true。
语法
bool empty ( mixed $var )
示例
$var = 0;
if (empty($var)) {
echo '$var is empty.';
} else {
echo '$var is not empty.';
}
// 输出: $var is empty.
$var = 'Hello World';
if (empty($var)) {
echo '$var is empty.';
} else {
echo '$var is not empty.';
}
// 输出: $var is not empty.
$var = array();
if (empty($var)) {
echo '$var is empty.';
} else {
echo '$var is not empty.';
}
// 输出: $var is empty.
isset() 和 empty() 的区别
- 检查的范围不同:
isset()
只检查变量是否已设置并且其值不是NULL。它不会检查变量的值是否为空字符串、0、'0'、FALSE或空数组等。empty()
检查的范围更广,它不仅检查变量是否已设置,还会检查变量的值是否等同于FALSE(包括空字符串、0、'0'、NULL、FALSE、空数组等)。
- 返回值:
- 两个函数都返回布尔值(true或false)。但是,它们的判断标准不同,因此返回的结果也可能不同。
- 使用场景:
- 使用
isset()
时,你通常想确认一个变量是否已被赋值,并且其值不是NULL。这在处理用户输入或数据库查询结果时特别有用,因为你可以确保变量已经存在,然后安全地对其进行操作。 - 使用
empty()
时,你通常想检查一个变量是否“为空”。这里的“为空”是一个更宽泛的概念,包括变量未设置、值为NULL、空字符串、0等。这在需要验证用户输入或检查变量是否包含有效数据时非常有用。
- 使用
- 对未定义变量的处理:
- 当对未定义的变量使用
isset()
时,它会返回false。这意味着你可以用它来安全地检查一个变量是否已被设置,而无需担心未定义变量警告。 - 虽然
empty()
在大多数情况下也能处理未定义的变量(返回true),但在某些上下文中(如作为函数参数时),它可能会引发未定义变量的警告。因此,在可能的情况下,最好先使用isset()
检查变量是否已设置,然后再使用empty()
检查其值是否为空。
- 当对未定义的变量使用
结论
isset()
和empty()
在PHP中都是用于检查变量的函数,但它们的用途和行为有所不同。isset()
用于检查变量是否已设置且非NULL,而empty()
用于检查变量是否“为空”(包括未设置、NULL、空字符串、0等)。了解这两个函数的区别,并根据需要选择使用它们,可以帮助你编写更清晰、更健壮的PHP代码。