在PHP 中, is_null()是一個常用的函數,用來檢查變量是否為NULL 。然而,由於PHP 中的類型轉換機制, is_null()在某些情況下可能會返回意料之外的結果,從而導致誤判。因此,了解如何正確使用is_null() ,避免返回false錯誤是非常重要的。
首先,我們來看一下is_null()的基本用法。它接受一個參數,並返回true或false ,表示該變量是否為NULL 。
<span><span><span class="hljs-variable">$var1</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-variable">$var2</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_null</span></span><span>(</span><span><span class="hljs-variable">$var1</span></span><span>)); </span><span><span class="hljs-comment">// bool(true)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_null</span></span><span>(</span><span><span class="hljs-variable">$var2</span></span><span>)); </span><span><span class="hljs-comment">// bool(false)</span></span><span>
</span></span>
這個例子中, $var1的值為null ,所以is_null($var1)返回true ,而$var2的值是字符串"Hello" ,因此返回false 。
雖然is_null()旨在檢測變量是否為NULL ,但是在某些情況下,其他類型的值也可能會與NULL相似,從而導致誤判。
在PHP 中, 0和'0'都會被認為是“空”的,但它們並不等於NULL 。當你使用is_null()來檢查這些值時,它們會被正確地判斷為false 。
<span><span><span class="hljs-variable">$var1</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable">$var2</span></span><span> = </span><span><span class="hljs-string">'0'</span></span><span>;
</span><span><span class="hljs-variable">$var3</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_null</span></span><span>(</span><span><span class="hljs-variable">$var1</span></span><span>)); </span><span><span class="hljs-comment">// bool(false)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_null</span></span><span>(</span><span><span class="hljs-variable">$var2</span></span><span>)); </span><span><span class="hljs-comment">// bool(false)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_null</span></span><span>(</span><span><span class="hljs-variable">$var3</span></span><span>)); </span><span><span class="hljs-comment">// bool(true)</span></span><span>
</span></span>
空數組[]和NULL在PHP 中也是不同的。雖然它們在某些情況下看起來很相似,但is_null()會明確返回false 。
<span><span><span class="hljs-variable">$var1</span></span><span> = [];
</span><span><span class="hljs-variable">$var2</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_null</span></span><span>(</span><span><span class="hljs-variable">$var1</span></span><span>)); </span><span><span class="hljs-comment">// bool(false)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_null</span></span><span>(</span><span><span class="hljs-variable">$var2</span></span><span>)); </span><span><span class="hljs-comment">// bool(true)</span></span><span>
</span></span>
如果你誤用is_null()來判斷空數組,可能會導致錯誤的結果。
為了避免誤判,首先要理解is_null()的判斷邏輯和PHP 的類型轉換規則。以下是一些避免誤判的技巧:
如果你需要判斷一個變量是否為NULL ,而又擔心可能與其他“空”值(如0 、 '0' 、空數組等)混淆,可以使用嚴格等號===來確保類型和值都一致。
<span><span><span class="hljs-variable">$var1</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable">$var2</span></span><span> = </span><span><span class="hljs-string">'0'</span></span><span>;
</span><span><span class="hljs-variable">$var3</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$var1</span></span><span> === </span><span><span class="hljs-literal">null</span></span><span>); </span><span><span class="hljs-comment">// bool(false)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$var2</span></span><span> === </span><span><span class="hljs-literal">null</span></span><span>); </span><span><span class="hljs-comment">// bool(false)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$var3</span></span><span> === </span><span><span class="hljs-literal">null</span></span><span>); </span><span><span class="hljs-comment">// bool(true)</span></span><span>
</span></span>
這樣可以避免因為類型轉換而帶來的誤判。
PHP 中有很多“空”的值,比如false 、 0 、 "" (空字符串)、空數組等。如果你需要判斷這些不同的情況,可以使用empty()函數,而不是is_null() 。
<span><span><span class="hljs-variable">$var1</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$var2</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-variable">$var3</span></span><span> = [];
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$var1</span></span><span>)); </span><span><span class="hljs-comment">// bool(true)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$var2</span></span><span>)); </span><span><span class="hljs-comment">// bool(true)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$var3</span></span><span>)); </span><span><span class="hljs-comment">// bool(true)</span></span><span>
</span></span>
empty()會返回true如果變量是空值,包括NULL 、 0 、空字符串、空數組等。
有時候,你可能需要更複雜的邏輯來判斷變量的狀態。可以通過自定義函數來處理各種情況。例如,檢查變量是否是NULL或者其他“空”值時,可以先排除NULL ,然後再進行其他檢查。
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">isActuallyNull</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$var</span></span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$var</span></span><span> === </span><span><span class="hljs-literal">null</span></span><span>;
}
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">isActuallyNull</span></span><span>(</span><span><span class="hljs-literal">null</span></span><span>)); </span><span><span class="hljs-comment">// bool(true)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">isActuallyNull</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>)); </span><span><span class="hljs-comment">// bool(false)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">isActuallyNull</span></span><span>(</span><span><span class="hljs-string">''</span></span><span>)); </span><span><span class="hljs-comment">// bool(false)</span></span><span>
</span></span>
在PHP 中, is_null()是一個非常有用的函數,但要小心它的誤判問題。由於PHP 的類型轉換機制,許多“空”值可能會與NULL相混淆。因此,使用嚴格比較操作符=== ,明確區分不同的“空”值,或者根據實際需求自定義檢查邏輯,是避免誤判的有效方法。通過合理的判斷,你可以確保代碼的準確性,避免因為誤判而引發的錯誤。