引言
PHP 程式中很多地方會用到判斷是否為空,比如字元串為空,數組為空,對象為空,或者其他資料類型為預設空值。
今天我們說一下判斷 null 的兩種方法的差別。一般可以使用 is_null 函數,判斷變量是否是 null,還可以使用 === null 判斷是否與 null 值絕對相等。
這兩者有什麼差別呢?
學習時間
比如有一個 if 語句要判斷某個變量是否為 null,有下面兩種寫法:
if (is_null($var)) do_something();
if ($var === null) do_something();
到底哪種方式更優,效率更高?
這裡有個前提,隻要是變量經過初始化,兩種方式相同。隻不過,is_null 還要加上函數調用的開銷,而 === 則直接執行條件判斷操作,效率更高。
===
用于嚴格的資料比較。NULL隻有一個“值”,是以可以與NULL(這是null“值”的PHP常量)進行比較。
is_null
正在檢查變量是否為NULL資料類型。
因為PHP是腳本語言,其資料類型動态指定,那麼有必要梳理一下各種空值在做運算時候的傳回值了:
特别需要指出的是,empty 函數相當于 == null,而 is_null 相當于 === null,後者比較更為嚴格。
而 isset 函數是 is_null / === null 的反向操作。
深入學習
實際程式設計中我們傾向于使用 is_null 函數,因為這樣寫程式更容易讀。比如在較為流行的 Laravel 架構内,就是用了大量的 is_null 函數。比如使用者對象判斷為null。
if (! is_null($this->user)) {
return $this->user;
}
比如對模型判斷為空,則建立新的對象:
protected function newModelQuery($model = null)
{
return is_null($model)
? $this->createModel()->newQuery()
: $model->newQuery();
}
還有一個原因是,is_null 作為函數,可以友善地作為回調函數引用。比如對數組内所有元素做非 null 過濾。
$arrayOfNullValues = array_filter($myArray, 'is_null');
寫在最後
本文介紹了PHP判斷是否為 null 的兩種方式,希望大家能夠熟練使用,寫出更優雅健壯的代碼。
Happy coding :_)
我是 @程式員小助手 ,持續分享程式設計知識,歡迎關注。