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


判斷差異表

首先先看看這個表:

compare.png

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

  • empty()if($x) 相反
  • isset()is_null() 相反

常見用法

  • if (empty($foo)) 就相等於 if(!isset($foo) || !$foo)

  • if(!empty($foo)) 相等於 if(isset($foo) && $foo)

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

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

if (!empty($foo)) {}

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

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


結論

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

  • empty(): 檢查一個變數是否被設置而且是否為 null, ‘’, 0, [], true/false
  • isset(): 只檢查變數有沒有被設置

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