在判斷空值、null或是0、FALSE等時,常見的幾種判斷方式有「isset()」、「is_null()」、「=== null」、「== null」、「empty()」。較常見的混淆除了比較的嚴格性(「=== null」與「== null」)之外,「=== null」和「is_null」也有些微的差異。為了方便快速調用,以下簡易列出需注意的點,並做一張能快速理解的表格。
「=== null」與「is_null」
但是,效能差異應該不明顯,如果要更為直觀,用「is_null」可以幫助快速理解。另一方面,「is_null」也可以作為回調函數來過濾掉陣列中為null的值。
$array = [1, null, 3 , null, 5];
$validValue = array_filter($array, function($value) {
return !is_null($value);
});
print_r($validValue); // Array ( [0] => 1 [2] => 3 [4] => 5 )
「=== null」與「== null」
假設今天需要判斷的是「真・null值」,則需要使用「=== null」,也建議養成嚴格比較習慣,避免意外的發生。相反,如果希望變數為空值或0等時都要視為null的話,就使用「== null」,但這樣似乎不夠直觀,這種情況應該用empty()更合適,代表它是空的,而不是「真・null值」。
「empty()」對於0的判斷
不過,empty()要注意如果值為0的情況也會視為是空的($var = 0 // TRUE),如果希望值為0的情況視為有效的值而非空的(比如需要使用到值為0的情況,而不是將0視為FALSE或NULL),那麼應該使用is_null或===null。
舉個例子:
$score = 0; // 假設這是分數
if(empty($score)) {
echo '沒有提交分數';
} else {
echo '分數:' . $score;
}
// 結果:沒有提交分數
由於成績也需要分數為0的情況,因此這裡不應該使用「empty()」,而是應該用is_null或=== null。如此就能得到「分數:0」的結果。
「isset()」的意思
「isset()」是判斷是否有設置該變數,且非NULL。因此,除非是設置如「$var = null」這樣的情況,否則任何的設置都視為真(TURE)。當然,「unset」顧名思義就是未設置,因此情況與NULL相同。
以下皆為真:
$var = '' ; // TRUE
$var = 0 ; // TRUE
$var = false ; // TRUE
快速理解表格
以下為快速理解表格,希望能幫到有需要的朋友:)
本文是否對您有幫助?