在php中empty() isset() is_null()三個(gè)函數(shù)都是判斷是否為空的情況,但是如果我個(gè)要具體的深入去了解這個(gè)三個(gè)函數(shù)發(fā)現(xiàn)還是有許多的區(qū)別.
is_null(), empty(), isset(),這幾個(gè)函數(shù)以及 == ”,== array() 會(huì)在實(shí)際操作中經(jīng)常用到,因?yàn)楣δ芎茴愃?可能會(huì)忽視了他們的區(qū)別,一不小心就會(huì)給工作帶來很大的麻煩,下面將這幾種結(jié)構(gòu)列出來,供自己和大家參考,鑒于表述的準(zhǔn)確性,部分解釋來自英文原版手冊(cè),避免中文手冊(cè)的更新不及時(shí)以及翻譯不當(dāng)?shù)葐栴}。
is_null()
is_null(),bool,當(dāng)參數(shù)滿足 null 的三種情況時(shí),is_null() 將返回 TRUE。
null類型,以下情況將被認(rèn)定為 NULL:
it has been assigned the constant NULL.
it has not been set to any value yet.
it has been unset().
source:http://cn2.php.net/manual/en/language.types.null.php
isset()
isset(),bool,用于判定參數(shù)是否被設(shè)定并且不是 NULL。參數(shù)只能是變量。
如果沒有設(shè)置變量,或者變量被 unset() 掉,或者變量值為 NULL ,返回 FALSE,其它情況返回 TRUE。即如果不是 NULL 就屬于 isset 的范疇了,這一點(diǎn)和 is_null() 函數(shù)正好相反。
如果傳遞多個(gè)參數(shù),將取交集。即所有參數(shù)全部符合 isset() 時(shí)才返回 TRUE。
ps:defined(),bool,用于檢查常量是否被設(shè)置。
source:http://cn2.php.net/manual/en/function.isset.php
empty()
empty(),bool,主要用于判斷變量是否為空,參數(shù)只能是變量。
如下情況將被判定位空,代碼如下:
“” (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
“0″ (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)
注:如果參數(shù)是未設(shè)置的變量,變量將被認(rèn)定為 NULL,不會(huì)報(bào)錯(cuò),返回 TRUE。
但是注意在 5.0.0 之后,Objects with no properties are no longer considered empty.
source:http://cn2.php.net/manual/en/function.empty.php
判定是否為空的方式還有 ==”,== array() 等,比較有局限性,都沒什么好說的,測(cè)試的類型如下:
- <?php
- $a;
- $b = false;
- $c = '';
- $d = 0;
- $e = null;
- $f = array();
- ?>
empty()
首先是empty的var_dump輸出:
- <?php
- var_dump(emptyempty($a));
- var_dump(emptyempty($b));
- var_dump(emptyempty($c));
- var_dump(emptyempty($d));
- var_dump(emptyempty($e));
- var_dump(emptyempty($f));
- ?>
- /*
- 程序輸出為:
- bool(true)
- bool(true)
- bool(true)
- bool(true)
- bool(true)
- bool(true)
- */
從代碼中可以看出,只要數(shù)據(jù)類型是否為空或假,empty()就輸出true。
isset()
再看看isset的輸出:
- var_dump(isset($a));
- var_dump(isset($b));
- var_dump(isset($c));
- var_dump(isset($d));
- var_dump(isset($e));
- var_dump(isset($f));
- /* 輸出
- bool(false)
- bool(true)
- bool(true)
- bool(true)
- bool(false)
- bool(true)
- */
可以看出isset()只能用來判斷是否為NULL和未定義。
is_null()
最后是is_null的輸出:
- var_dump(is_null($a));
- var_dump(is_null($b));
- var_dump(is_null($c));
- var_dump(is_null($d));
- var_dump(is_null($e));
- var_dump(is_null($f));
- /*輸出
- bool(true)
- bool(false)
- bool(false)
- bool(false)
- bool(true)
- bool(false)
- */
is_null 字面意思了。
由此可見 empty() 可以用來判定所有的數(shù)據(jù)類型是否為空或假,而 is_null 與 isset 基本一樣,只能用來判斷是否為NULL和未定義。
概括總結(jié)isset,empty,is_null區(qū)別:
剛才介紹的:檢查變量,以及參數(shù)類型,這個(gè)是這3個(gè)函數(shù)不同之處的基礎(chǔ),也是最容易被忽視的,看到網(wǎng)上有很多對(duì)這個(gè)3個(gè)函數(shù)進(jìn)行比較文章,很少涉及這些,下面我要說的,是在都檢查已存在變量情況下,不同之處,代碼如下:
- <?php
- $a=100;
- $b="";
- $c=null;
- //isset檢查
- echo "isset","$a=$a",isset($a)?"define":"undefine","rn";
- echo "isset","$b=$b",isset($b)?"define":"undefine","rn";
- echo "isset","$c=$c",isset($c)?"define":"undefine","rn";
- unset($b);
- echo "isset","$b",isset($b)?"define":"undefine","rn";
- $b=0;
- echo "rnrn";
- //empty檢查
- echo "empty","$a=$a",!emptyempty($a)?"no empty":"empty","rn";
- echo "empty","$b=$b",!emptyempty($b)?"no empty":"empty","rn";
- echo "empty","$c=$c",!emptyempty($c)?"no empty":"empty","rn";
- unset($b);
- echo "empty","$b",!emptyempty($b)?"no empty":"empty","rn";
- $b=0;
- echo "rnrn";
- //is_null檢查
- echo "is_null","$a=$a",!is_null($a)?"no null":"null","rn";
- echo "is_null","$b=$b",!is_null($b)?"no null":"null","rn";
- echo "is_null","$c=$c",!is_null($c)?"no null":"null","rn";
- unset($b);
- echo "is_null","$b",is_null($b)?"no null":"null","rn";
新聞熱點(diǎn)
疑難解答