PHP empty() 和 isset() 差別
Posted
常常在判斷數值是產生疑惑,什麼時候用 empty()
,什麼時候用 isset()
,或者直接使用 if($variable)
,這邊做個小小的整理。
判斷差異表
首先先看看這個表:
有此可發現,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()
就可以了:
// $foo 有設置且不為空
if (isset($foo) && !empty($foo)) {}
if (!empty($foo)) {}
if(empty($foo)), if(!$foo) 差別 ?
差別在於當 $foo
沒有設定時,if(!$foo)
會跳錯誤訊息,if(empty($foo))
則不會。
結論
最簡單還是用語義來判斷:
empty()
: 檢查一個變數是否被設置而且是否為 null, ‘’, 0, [], true/falseisset()
: 只檢查變數有沒有被設置
使用時機還是要看當時的情況,理解判斷的範圍,和可能發生的錯誤訊息。