方法對照表
| 方法 | 判斷為 TRUE 的值 | 未聲明變量 | 適用場景 |
isset($v) | 變量存在且 ≠ null | FALSE(不報錯) | 檢查變量是否初始化、數組鍵是否存在 |
empty($v) | ""、0、"0"、null、false、[]、未聲明 | TRUE(不報錯) | 表單驗證、檢查「無效」值 |
$v == null | ""、0、"0"、null、false、[] | 報 Notice | 鬆散空值檢查(已知變量存在) |
is_null($v) | 嚴格 null | 報 Notice | 精確判斷 null 型別 |
$v === null | 嚴格 null | 報 Notice | 型別+值雙重檢查 |
核心結論
- 「NULL」與「空」是兩個概念:
null 是型別,""、0、false 是值。
- 僅判斷
null 型別 → is_null() 或 === null。
- 判斷「無效/空值」含 0 →
empty()(但注意 0 被視為空)。
- 判斷變量是否聲明/初始化 →
isset()(最高效、不報錯)。
- 數組鍵存在性 →
isset($arr['key']) 效率比 array_key_exists 高 4 倍。
實戰選型流程圖
需要檢查變量?
├─ 是否已聲明? → isset()
├─ 是否為 null 型別? → is_null() / === null
├─ 是否為「空值」含 0/false/空串? → empty()
└─ 鬆散比較(已知存在)? → == null
常見錯誤示例
$a = 0;
if (empty($a)) echo "empty"; // 輸出 empty(業務若允許 0 則錯誤)
if ($a == null) echo "==null"; // 輸出 ==null
if (is_null($a)) echo "is_null"; // 無輸出
if ($a === null) echo "===null"; // 無輸出