但有時候會發現在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而, isset因為是語句, 所以不能這樣調用.
因為is_null是函數, 所以它可以接受函數返回值做為參數, 而isset不行(當然, 如果PHP想支持, 其實也是可以的, 只不過就要增加編譯階段的復雜度了):
代碼如下 復制代碼 <?php說了這麼多isset的缺點了, 說點它的優點吧:
因為isset是語句, 所以它快!
在一千萬次的簡單檢測語句循環中, 對比結果如下:
代碼如下 復制代碼 <?php因為isset叫做isset, 所以它在檢測未定義變量的時候, 不會產生NOTICE:
代碼如下 復制代碼 <?php那麼, 對於什麼時候用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() 函數。