php empty,isset,is_null判斷比較(差異與異同)

來源:互聯網
上載者:User

一、舉例說明
A.一個變數沒有定義,我們該怎麼樣去判斷呢 複製代碼 代碼如下:<?php
#不存在$test 變數

$isset= isset($test)?"test is define!":"test is undefine!";
echo "isset:$isset\r\n";

$empty=!empty($test)?"test is define!":"test is undefine!";
echo "empty:$empty\r\n";

$is_null=is_null($test)?"test is define!":"test is undefine!";
echo "is_null:$is_null\r\n";

測試結果是:

結果出來了:empty,isset首先都會檢查變數是否存在,然後對變數值進行檢測。而is_null 只是直接檢查變數值,是否為null,因此如果變數未定義就會出現錯誤!

B、看下各自接收的參數是什嗎?

isset函數參數:

<?php
$test=100;
echo isset($test),isset(100),$isset($b=100);

<br />
<b>Parse error</b>: parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />

empty函數參數:

<?php
$test=100;

echo empty($test),empty(100),empty($b=100);

<br />
<b>Parse error</b>: parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />

is_null函數參數:

<?php
$test=100;

echo is_null($test),is_null(100),is_null($b=100);

運行結果:沒有任何錯誤。

比較結果出來了:empty,isset輸入參數必須是一個變數(php變數是以$字元開頭的),而is_null輸入參數只要是能夠有傳回值就可以。(常量,變數,運算式等)。在php手冊裡面,對於他們解析是:empty,isset 是一個語言結構而非函數,因此它無法被變數函數調用。

二、概括總結isset,empty,is_null區別:
剛才介紹的:檢查變數,以及參數類型,這個是這3個函數不同之處的基礎,也是最容易被忽視的。看到網上有很多對這個3個函數進行比較文章。很少涉及這些。下面我要說的,是在都檢查已存在變數情況下,不同之處。

執行個體:

複製代碼 代碼如下:<?php
$a=100;
$b="";
$c=null;
//isset檢查
echo "isset","\$a=$a",isset($a)?"define":"undefine","\r\n";
echo "isset","\$b=$b",isset($b)?"define":"undefine","\r\n";
echo "isset","\$c=$c",isset($c)?"define":"undefine","\r\n";
unset($b);
echo "isset","\$b",isset($b)?"define":"undefine","\r\n";
$b=0;
echo "\r\n\r\n";

//empty檢查
echo "empty","\$a=$a",!empty($a)?"no empty":"empty","\r\n";
echo "empty","\$b=$b",!empty($b)?"no empty":"empty","\r\n";
echo "empty","\$c=$c",!empty($c)?"no empty":"empty","\r\n";
unset($b);
echo "empty","\$b",!empty($b)?"no empty":"empty","\r\n";
$b=0;
echo "\r\n\r\n";

//is_null檢查
echo "is_null","\$a=$a",!is_null($a)?"no null":"null","\r\n";
echo "is_null","\$b=$b",!is_null($b)?"no null":"null","\r\n";
echo "is_null","\$c=$c",!is_null($c)?"no null":"null","\r\n";
unset($b);
echo "is_null","\$b",is_null($b)?"no null":"null","\r\n";


通過上面這個簡單測試,我們可以大體知道,當一個變數存在情況下:isset,empty,is_null檢測,得到值情況了。上面沒有舉例更多變數。其實測試發現:

empty

如果 變數 是非空或非零的值,則 empty() 返回 FALSE。換句話說,""、0、"0"、NULL、FALSE、array()、var $var、未定義; 以及沒有任何屬性的對象都將被認為是空的,如果 var 為空白,則返回 TRUE。

isset

如果 變數 存在(非NULL)則返回 TRUE,否則返回 FALSE(包括未定義)。變數值設定為:null,返回也是false;unset一個變數後,變數被取消了。注意,isset對於NULL值變數,特殊處理。

is_null

檢測傳入值【值,變數,運算式】是否是null,只有一個變數定義了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定義變數傳入後會出錯!】.

疑問:怎麼樣判斷一個變數被設定了,並且值為NULL呢?

通過上面比較,估計大家與我一樣,會有這個問題浮現在腦海裡面。 檢測一個變數是否是null 可以用:is_null,但如果變數未定義用它檢測會出錯。因此,我們想到,檢測變數是否定義可以用:isset,但是如果一個變數值是:null, 則它會返回false . 哈哈,這個問題怎麼樣解決呢?等待大家分享……

檢查變數存在,並且值為NULL.複製代碼 代碼如下:<?php
function checkNull($a)
{
if(array_key_exists($a,$GLOBALS))
{
global $$a;
if(is_null($$a))
return true;
}
return false;
}
$test=null;
var_dump(checkNull("test"));
var_dump(checkNull("test1"));

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.