PHP 提供 empty()、is_null()、isset() 三個常用判空函數,但其行為差異常導致邏輯錯誤。本文通過實測數據釐清適用場景。
<?php
$a; // 未定義
$b = false; // 布爾偽
$c = ''; // 空字串
$d = 0; // 整數零
$e = null; // 空值
$f = array(); // 空陣列
| 變量 | 值 | empty() | is_null() | isset() |
|---|---|---|---|---|
| $a | 未定義 | true | true | false |
| $b | false | true | false | true |
| $c | '' | true | false | true |
| $d | 0 | true | false | true |
| $e | null | true | true | false |
| $f | array() | true | false | true |
true:""、0、0.0、"0"、null、false、array()、未定義變量empty('0') === true,可能誤判字串「0」null 或變量未定義時返回 truefalse、0、''、array() 均返回 falsenull 返回 truefalse、0、''、array() 均返回 truenull 返回 false| 需求 | 推薦函數 | 範例 |
|---|---|---|
| 檢查變量有實際內容(非假值) | !empty() | if (!empty($_POST['name'])) |
| 嚴格判斷是否為 null | is_null() | if (is_null($var)) |
| 檢查變量/陣列鍵是否已定義 | isset() | if (isset($arr['key'])) |
| 區分「未定義」vs「定義為 null」 | isset() + is_null() | isset($v) && is_null($v) |
結論:empty() 適合業務邏輯的「非空驗證」;is_null() 與 isset() 針對變量狀態檢測,二者互補。選對函數,避免邏輯漏洞。