PHP技巧篇之isset()與empty()以及is_null()的區(qū)別

相信這三個(gè)函數(shù)我們?cè)陂_發(fā)中經(jīng)常遇到,但是你真的知道這三個(gè)函數(shù)到底有什么區(qū)別嗎?或許你留意過,但是你很快忽略了;或許你已經(jīng)吃了它們的虧,到網(wǎng)上查了一些資料,結(jié)果看的暈頭轉(zhuǎn)向。今天我們用簡潔的代碼與直白的解釋來看一下這三者的區(qū)別與使用場(chǎng)景。

PHP技巧篇之isset()與empty()以及is_null()的區(qū)別
三者區(qū)別
  1. isset(var)用來檢測(cè)一個(gè)變量是否已經(jīng)聲明并且其值不為NULL。
  2. empty(var)用來檢測(cè)一個(gè)變量是否為“空”。
  3. is_null(var)判斷變量內(nèi)容是否為NULL值。
然后你看完以上三條記錄,嘴里罵罵咧咧,他媽的,跟繞口令一樣。
此處“空”和NULL的區(qū)別
0與' '與NULL與false與空數(shù)組[array()]以及unset(var)后的變量這么多值與NULL相等嗎?它們是不相等的,

isset(var)只有在變量值不為NULL時(shí)返回真,is_null(var)只有在變量為NULL時(shí)返回真,二者是反函數(shù)!。

所以我們知道了isset(var)與is_null(var)后,就剩下empty(var)了,這家伙是個(gè)大胃王!只要碰到0與' '與NULL與false與空數(shù)組[array()]以及unset(var)后的變量這類的就可以用empty(var),此時(shí)empty(var)都會(huì)返回真值。
光說不練假把式,Show you my code.

準(zhǔn)備將要進(jìn)行測(cè)試的各種數(shù)據(jù)

<?php
// 準(zhǔn)備好數(shù)據(jù)
<?php
$array = ["r" => "red"];    //非空數(shù)組
$array_null = [];           //空數(shù)組
$str = "";                  //空字符串
$num = 0;                   //0
$bool = false;              //false
$null = NULL;               //null
各函數(shù)分別測(cè)試

isset(var)

//  isset(var)  test begin
echo isset($array) ? "true" : "false", "\r\n",
     isset($array_null) ? "true" : "false", "\r\n",
     isset($str) ? "true" : "false", "\r\n",
     isset($num) ? "true" : "false", "\r\n",
     isset($bool) ? "true" : "false", "\r\n",
     isset($null) ? "true" : "false", "\r\n";
isset(var) 測(cè)試結(jié)果
isset(var) test result

empty(var)

// empty(var) test begin
echo empty($array) ? "true" : "false", "\r\n",
     empty($array_null) ? "true" : "false", "\r\n",
     empty($str) ? "true" : "false", "\r\n",
     empty($num) ? "true" : "false", "\r\n",
     empty($bool) ? "true" : "false", "\r\n",
     empty($null) ? "true" : "false", "\r\n";
empty(var) 測(cè)試結(jié)果
empty(var) test result

is_null(var)

// is_null(var) test begin
echo is_null($array) ? "true" : "false", "\r\n",
     is_null($array_null) ? "true" : "false", "\r\n",
     is_null($str) ? "true" : "false", "\r\n",
     is_null($num) ? "true" : "false", "\r\n",
     is_null($bool) ? "true" : "false", "\r\n",
     is_null($null) ? "true" : "false", "\r\n";
is_null(var) 測(cè)試結(jié)果
is_null(var) test result
經(jīng)過上面的測(cè)試再加上我們之前的分析,我想大家現(xiàn)在已經(jīng)基本了解了這三者區(qū)別以及各自的作用,但是我還發(fā)現(xiàn)了一點(diǎn)需要和大家分析的東西,就是

isset(var)可以應(yīng)用到未知變量!而is_null(var)能針對(duì)于已聲明變量!
這一點(diǎn)怎么理解呢?

場(chǎng)景

有時(shí)候我們?cè)谀P椭卸x方法,然后控制器傳參調(diào)用,如果傳遞的是一個(gè)數(shù)組,方法中可能要檢驗(yàn)一下傳遞的參數(shù),如果該參數(shù)中包含某個(gè)值則如何如何處理。

<?php
// Defining array
$array = [
    'bar'  => 'hello',
    'bar_' => 'world',
];

// Anonymous function
$foo = function(array $params){
    return isset($params['bar']) ? true : false;
};

// get result
echo $foo($array);
dmeo03.php
說到這里基本也就完整了,如果哪里有看不明白的地方,可以留言;當(dāng)然了如果我的文字里有表達(dá)不當(dāng)或者解釋有誤的地方,歡迎指出。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容