← 返回首页
PHP中 isset和empty的区别
isset 和 empty 的区别
两者都用于检测变量,但判断逻辑完全不同:
| 函数 | 判断内容 | 返回 true 的条件 |
|---|---|---|
isset() |
变量是否已设置且不为 null | 变量存在且值不是 null |
empty() |
变量是否为空 | 变量不存在,或值为"空" |
"空"值对照表
| 值 | isset() |
empty() |
|---|---|---|
""(空字符串) |
✅ true | ✅ true |
"0"(字符串0) |
✅ true | ✅ true |
0(整数0) |
✅ true | ✅ true |
0.0(浮点0) |
✅ true | ✅ true |
null |
❌ false | ✅ true |
false |
✅ true | ✅ true |
[](空数组) |
✅ true | ✅ true |
"hello" |
✅ true | ❌ false |
| 未定义变量 | ❌ false | ✅ true |
代码示例
$a = "";
$b = "0";
$c = null;
$d = 0;
// $e 未定义
isset($a); // true empty($a); // true
isset($b); // true empty($b); // true
isset($c); // false empty($c); // true
isset($d); // true empty($d); // true
isset($e); // false empty($e); // true
核心关系
// 以下两种写法等价
empty($var) ≡ !isset($var) || $var == false
使用建议
-
判断变量是否存在 → 用
isset()if (isset($_GET['page'])) { ... } -
判断变量是否有"有效值" → 用
empty()if (!empty($_POST['username'])) { ... } -
需要区分
0、"0"、false等值时 → 不要用empty(),用严格比较// 会把 0 和 "0" 误判为空 if (empty($status)) { ... }// 精确判断
if ($status === null || $status === '') { ... }
总结:
isset只管"有没有",empty管"有没有且有没有值"。涉及0、"0"、false等业务上有意义的值时,慎用empty()。