PHP empty() 和 isset() 差別

常常在判斷數值是產生疑惑,什麼時候用 empty(),什麼時候用 isset(),或者直接使用 if($variable),這邊做個小小的整理。

判斷差異表

首先先看看這個表:

compare.png

有此可發現,empty() 能判斷值的範圍比 isset() 還多,能多判斷 '' [] true false 0 '0' 等。

常見用法

以下冗長寫法,其實用 empty() 就可以了:

// $foo 有設置且不為空
if (isset($foo) && !empty($foo)) {}

if (!empty($foo)) {}

if(empty($foo)), if(!$foo) 差別 ?

差別在於當 $foo 沒有設定時,if(!$foo)跳錯誤訊息if(empty($foo))則不會。

結論

最簡單還是用語義來判斷:

使用時機還是要看當時的情況,理解判斷的範圍,和可能發生的錯誤訊息。