相信這三個(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ū)別
- isset(var)用來檢測(cè)一個(gè)變量是否已經(jīng)聲明并且其值不為NULL。
- empty(var)用來檢測(cè)一個(gè)變量是否為“空”。
- 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