PHP 中 isset() 与 empty() 的区别
2024年12月6日大约 2 分钟
PHP 中 isset() 与 empty() 的区别
isset() 和 empty() 是 PHP 中两个常用于变量检查的函数,但它们的功能和使用场景有明显区别。
基本定义
isset()
- 检查变量是否已设置且不为 NULL
- 返回
true或false - 语法:
isset($var)或isset($var1, $var2, ...)
empty()
- 检查变量是否为空值
- 返回
true或false - 语法:
empty($var)
判断结果对比表
| 变量值 | isset() | empty() |
|---|---|---|
| $var 未定义 | false | true |
| $var = null; | false | true |
| $var = ""; | true | true |
| $var = 0; | true | true |
| $var = "0"; | true | true |
| $var = 0.0; | true | true |
| $var = false; | true | true |
| $var = array(); | true | true |
| $var = 1; | true | false |
| $var = "abc"; | true | false |
| $var = array(1); | true | false |
| $var = true; | true | false |
主要区别
检查目的不同:
isset()主要检查变量是否存在(已声明且不为 NULL)empty()主要检查变量是否有值(不为""、0、NULL、false等)
对未定义变量的处理:
isset($undefinedVar)- 返回false,不产生警告empty($undefinedVar)- 返回true,不产生警告- 直接使用
$undefinedVar- 产生 "Undefined variable" 警告
检查"假"值:
isset()不关心变量具体内容,只检查是否设置了变量empty()会检查变量是否为以下值之一:- "" (空字符串)
- 0 (整数零)
- "0" (字符串"0")
- NULL
- FALSE
- array() (空数组)
- $var; (声明了但未赋值的变量)
对数组元素的检查:
isset($array['key'])- 检查数组是否有该键且值不为 NULLempty($array['key'])- 检查该键对应的值是否为空
使用场景
isset() 适合的场景
- 检查变量是否被声明/定义
- 检查表单字段是否提交(即使提交空值)
- 检查数组键是否存在
- 避免"未定义变量"错误
// 检查是否提交了表单
if (isset($_POST['submit'])) {
// 处理表单...
}
// 检查数组键是否存在
if (isset($array['key'])) {
$value = $array['key'];
}empty() 适合的场景
- 检查变量是否有实际内容(非空)
- 验证必填字段
- 判断字符串、数组是否为空
// 检查必填字段
if (empty($_POST['username'])) {
echo "用户名不能为空";
}
// 检查数组是否有内容
if (!empty($results)) {
foreach ($results as $result) {
// 处理结果...
}
}组合使用
一个常见的实践是组合使用两者进行安全检查:
// 先检查变量是否存在,再检查是否有值
if (isset($_POST['email']) && !empty($_POST['email'])) {
$email = $_POST['email'];
// 进一步处理...
}注意事项
isset()可以同时检查多个变量:isset($var1, $var2, $var3)empty()只能检查一个变量:empty($var)- 在 PHP 7.0+ 中,可以安全地使用
empty()检查未定义的变量,而不会产生错误 isset()检查的是变量是否存在,而不是其值是否为true
理解这两个函数的区别和适用场景,有助于编写更健壮、更安全的 PHP 代码。