萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php中isset(Null)與is_null() empty()用法比較

php中isset(Null)與is_null() empty()用法比較

在很多的程序員眼中php中的isset(Null)與is_null() empty()三個函數用法不太清楚了,下面小編就為各位介紹一下吧,希望可以給大家帶來幫助。

但有時候會發現在php中沒有達到想要實現的目的。
具體原因我就不討論了,php實際應用中一般都是用isset()函數來做判斷的。
示例如下:

 代碼如下 復制代碼

if( isset($_GET[’name’]) )//判斷傳來的值是否為空。 

    echo "值為空"; 
}


例子

 代碼如下 復制代碼

<?php
//預定義變量數組:空字符,字符0,數組0,null,布爾false,空數組
$arr_var = array('', '0', 0, null, false, array());

foreach ($arr_var as $value) {
    echo '<br>傳入值為:' . $value . '<br>';
    if (!isset($value)) {
        echo 'isset()==false<br>';
    }
    if (empty($value)) {
        echo 'empty()==true<br>';
    }
    if (!$value) {
        echo 'self==false<br>';
    }
    if (is_null($value)) {
        echo 'is_null()==true<br>';
    }
}
?>
輸出結果:

傳入值為:
empty()==true
self==false

傳入值為:0
empty()==true
self==false

傳入值為:0
empty()==true
self==false

傳入值為:
isset()==false
empty()==true
self==false
is_null()==true

傳入值為:
empty()==true
self==false

傳入值為:Array
empty()==true
self==false

總結一:從結果中可以看出,""、0、"0"、NULL、FALSE、array()這幾個中,empty()和“變量本身作為參數”結果一致,均作為“空”來處理,而isset()和is_null ()僅當是null時,才作為“空”來處理(值得注意的是false並不會被認為是空)


isset和is_null對比

is_null是函數, 所以它可以通過如下方式調用:

 代碼如下 復制代碼 <?php
$var  = NULL;
$func = "is_null";
$func($var);
?>

而, isset因為是語句, 所以不能這樣調用.

因為is_null是函數, 所以它可以接受函數返回值做為參數, 而isset不行(當然, 如果PHP想支持, 其實也是可以的, 只不過就要增加編譯階段的復雜度了):

 代碼如下 復制代碼 <?php
is_null(intval("0x45"));
//OK
isset(intval("0x45"));
//PHP Fatal error:  Can't use function return value in write context
is_null(NULL);
//OK
isset(NULL);
//PHP Parse error:  syntax error
?>

說了這麼多isset的缺點了, 說點它的優點吧:

因為isset是語句, 所以它快!

在一千萬次的簡單檢測語句循環中, 對比結果如下:

 代碼如下 復制代碼 <?php
$a="laruence":
isset($a);   //用時: 1.15s
is_null($a); //用時: 3.89s
?>

因為isset叫做isset, 所以它在檢測未定義變量的時候, 不會產生NOTICE:

 代碼如下 復制代碼 <?php
isset($laruence);
//OK
is_null($laruence);
//PHP Notice:  Undefined variable: laruence
?>

那麼, 對於什麼時候用isset什麼時候用is_null, 我有什麼建議呢?

诶, 我的建議是, 用函數做函數應該做的事情~, 聽起來象廢話?

isset => is set? => 變量有沒有被賦值(聲明)

is_null => is null? => 變量為NULL麼?

另外, 如果要用is_null, 我建議使用 “=== NULL” 來代替, 它不僅語義和is_null一致, 結果一致, 速度還和isset差不多:

在一千萬次的簡單檢測語句循環中, 對比結果如下:

 代碼如下 復制代碼

<?php
$a="laruence":
isset($a);      //用時: 1.15s
is_null($a);    //用時: 3.88s
$a===NULL;     //用時: 1.22s
?>


使用說明:

1、空值、0、false的賦值結果均被isset判為 TRUE
2、NULL將被isset判為 FALSE 
3、isset()同樣適用於數組元素和對象元素的檢查。若數組或對象實例未被定義,則檢測其中的數組元素/對象元素將被返回false。

附:

PHP的isset()函數
格式:bool isset ( mixed var [, mixed var [, ...]] ) 
功能:檢測變量是否設置 
返回值: 
若變量不存在則返回 FALSE 
若變量存在且其值為NULL,也返回 FALSE 
若變量存在且值不為NULL,則返回 TURE 
同時檢查多個變量時,每個單項都符合上一條要求時才返回 TRUE,否則結果為 FALSE 

版本:PHP 3, PHP 4, PHP 5 

更多說明: 
使用 unset() 釋放變量之後,它將不再是 isset()。 
isset() 只能用於變量,傳遞任何其它參數都將造成解析錯誤。 
檢測常量是否已設置可使用 defined() 函數。

copyright © 萬盛學電腦網 all rights reserved