PHP 類型判斷和NULL捕捂,空值檢查
判斷變量是否為NULL
在PHP中要判斷一個變量是否NULL有很多方式:
is_null VS isset
這兩個函數(shù)都可以來判斷一個變量是否為NULL,它們對空字符串斗搞,0指攒,false的認(rèn)同是一樣的。即is_null=! isset()榜旦。
但是isset是語法結(jié)構(gòu)幽七,is_null是函數(shù)。在性能上溅呢,語法結(jié)構(gòu)相對要優(yōu)秀一點(diǎn)澡屡。所以很多地方都推薦使用isset來代替is_null的使用。
== VS ===
在有些情況下咐旧,推薦使用isset來判斷一個變量是否為NULL驶鹉。
但是從語義上來說,一個變量”是否已顯示初始化“和”是否為NULL“是不同的概念铣墨,在某些場景下使用isset是不合適的室埋,比如檢查一個函數(shù)的返回值是否為NULL。
此時可以使用"=="和”===“來判斷它們是否為NULL伊约。
對于"=="和”===“姚淆,它們直接的區(qū)別還是很大。對于"=="屡律,它認(rèn)同空字符串腌逢,0,false都為NULL超埋。而對于"==="搏讶,只有一個變量真的為NULL佳鳖,它才代表NULL。
另外"==="相對于"isset"來說媒惕,性能基本接近系吩,甚至要好點(diǎn)。
因此綜上述妒蔚,判斷一個變量是否為NULL最好的辦法就是直接使用"==="穿挨,這樣就不用在is_null,isset之間猶豫肴盏。其實(shí)上述的結(jié)論也同理于False的判斷絮蒿。
empty()函數(shù)的認(rèn)識
在判斷變量是否為NULL時候,也會把empty這個函數(shù)拿來和isset之類的一起討論叁鉴。其實(shí)這個函數(shù)沒有必要和他們進(jìn)行比較土涝,因?yàn)樗淼囊馑己芎唵危囊馑季褪桥袛嘁粋€變量所存儲的內(nèi)容是否為零或者為空幌墓,而這里的空不僅僅是NULL但壮。那么有哪些內(nèi)容代表零或者空的概念呢?""常侣、0蜡饵、"0"、NULL胳施、FALSE溯祸、array()、var $var; 以及沒有任何屬性的對象都將被認(rèn)為是空的舞肆,都代表了為零焦辅。
如果e=NULL椿胯,它肯定是空筷登,即empty(
e是int類型,
e)=true;
如果e=""惠险,相對于字符串,”“就代表為是空抒线,即empty(
e是string類型班巩,
e)=true;
如果e=false旱物,相對true遥缕,false就代表為空,即empty(
e是array類型宵呛,
e)=true;