← 返回首页

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()。