許多開發者混淆 isset() 與 empty(),導致變數判斷邏輯錯誤。本文透過對照表與實戰程式碼,釐清兩者行為差異。
| 特性 | isset() | empty() |
|---|---|---|
| 檢測目的 | 變數是否存在且非 NULL | 變數是否為「空值」 |
| 回傳 TRUE 條件 | 變數存在且值 != NULL | 不存在、""、0、"0"、NULL、FALSE、array()、未賦值屬性 |
| 多變數檢測 | 支援多參數,全符合才回傳 TRUE | 單一參數 |
| 常見陷阱 | 檢測常數需用 defined() | 0 與 "0" 視為空值 |
<?php
$var = 0;
// 結果為 true,因為 $var 為空
if (empty($var)) {
echo '$var is either 0 or not set at all';
}
// 結果為 false,因為 $var 已設定
if (!isset($var)) {
echo '$var is not set at all';
}
?>
empty($var) 回傳 TRUE,isset($var) 回傳 TRUEempty() 回傳 TRUE,isset() 回傳 FALSE(不會觸發警告)isset()empty()if (isset($var) && !empty($var)) 代表變數存在且非空$_GET['id'] 可能為 0 的情境:if (!isset($id)) $id = 1; 比 empty() 更安全