在實(shí)際開發(fā)過程中,我們經(jīng)常會進(jìn)行變量為空判斷,比如我們接收ajax傳遞過來的參數(shù),在處理之前要進(jìn)行判斷,以免訪問空的地址造成錯(cuò)誤。
經(jīng)常使用的方法有,empty($var), is_null($var),isset($var)
如何區(qū)分這三個(gè)方法,
1、empty()
的定義為:若變量已存在、非空字符串或者非零,則返回 false 值;反之返回 true。言外之意就是int 0,string '0'(用c語言的數(shù)據(jù)類型對比)
,都會被判做空,也就是返回true,這是從java或者c轉(zhuǎn)php后會遇到的一個(gè)坑。
2、is_null()
,檢測變量是否為NULL
。我們知道php中數(shù)據(jù)分為這樣幾種類型:字符串、整型、浮點(diǎn)型、布爾型、數(shù)組、對象,NULL,即string、int、float、bool、array,object,NULL
。其中NULL
表示數(shù)據(jù)無值,null
是NULL
數(shù)據(jù)類型唯一可能的值,當(dāng)聲明一個(gè)變量的時(shí)候,如果不賦值,則表示為null
,如$var;
與 $var = null;
是一樣的,在這種情況下 is_null($var) = true
。
3、isset()
,用于檢測變量是否存在(賦值?聲明?),一般情況下用法跟is_null()
相反,有點(diǎn)互斥的意思,雖然他倆區(qū)別還挺大,簡單來說isset()
是語句(可用理解為if...else
或者foreach
之流),而is_null()
是函數(shù)(就是你認(rèn)識的函數(shù))。語句在編譯器編譯過程中,就會直接生成結(jié)果,而函數(shù)只有運(yùn)行后才會知道結(jié)果。
下面把這三個(gè)方法的一些常用并且易混的情況列舉如下:
變量 empty() is_null() isset()
$a="" true false true
$a=null true true false
var $a true true false
$a=array() true false true
$a=false true false true
$a=15 false false true
$a=1 false false true
$a=0 true false true
$a="0" true false true
$a=true false false true
$a=false true false true
對齊太費(fèi)勁了!