php中empty()、isset()、is_null()和變數本身的布林判斷區別(轉)

developerguy發表於2016-04-29

在php指令碼中,我們經常要去判斷一個變數是否已定義或者是否為空,就需要用到這些函式empty()、isset()、is_null()和其本身作為引數,下面小段程式做個簡要比較

複製程式碼
<?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”NULLFALSEarray()這幾個中,empty()和“變數本身作為引數”結果一致,均作為“空”來處理,而isset()和is_null ()僅當是null時,才作為“空”來處理(值得注意的是false並不會被認為是空)

下面我們看下當一個變數未定義初始化時,這些函式返回的是什麼

複製程式碼
echo `<br>傳入值為:undefine<br>`;
if (!isset($value_undefine)) {
echo `isset()==false<br>`;
}
if (empty($value_undefine)) {
echo `empty()==true<br>`;
}
if (!$value_undefine) {
echo `self==false<br>`;
}
if (is_null($value_undefine)) {
echo `is_null()==true<br>`;
}
輸出結果:

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

(此處警告變數未定義)
self==false

(此處警告變數未定義)
is_null()==true
複製程式碼

 總結二:由結果可看出,當變數未定義時,is_null()和“本身引數”是不允許作為引數判斷的,雖然結果可以判斷出來為“空”,建議不使用。

isset()和empty()可以正常判斷出為”空”的.

 

1
2
3
4
5
6
7
8
9
最後總結:
 
isset(),僅當null和未定義,返回false
 
empty(),""、0、"0"、NULL、FALSE、array(),未定義,均返回false
 
本身作為引數,與empty()一致,但接受未定義變數時,報警告
 
is_null(),僅判斷是否為null,未定義報警告
 

 

http://www.cnblogs.com/huangzhen/archive/2011/08/21/2147808.html#3303118


相關文章