up
down
Close
架站盒子
Web Development Box
 

PHP 快速判斷空值、null、false、0等

│ 602 Views │ PHP

在判斷空值、null或是0、FALSE等時,常見的幾種判斷方式有「isset()」、「is_null()」、「=== null」、「== null」、「empty()」。較常見的混淆除了比較的嚴格性(「=== null」與「== null」)之外,「=== null」和「is_null」也有些微的差異。為了方便快速調用,以下簡易列出需注意的點,並做一張能快速理解的表格。

「=== null」與「is_null」

「=== null」為嚴格比較,除了判斷值為null之外,類型也必須為NULL,與「is_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」差異甚大,前者為嚴格比較,後者為寬鬆比較,因此「== null」在空值("")、0或FALSE,都會判斷為真(TRUE)。

假設今天需要判斷的是「真・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

快速理解表格

以下為快速理解表格,希望能幫到有需要的朋友:)

標題
圖片描述

 

延伸閱讀

本文是否對您有幫助?