ADUNIT000

PHP isset()和empty()的區別

寫程式過程中,經常會用到判斷函數isset()和empty()

但有時候會搞不清楚兩者的差別

最大的差別是兩者判斷的東西不同

isset判斷的是 "變數"

empty判斷的是 "值"

下面做了幾個例子來測試一下

 

//先設定幾個變數,這邊故意沒有設A這個變數

       $b = NUll;

       $c = 0; 

       $d = 1;

       $e = ""; 

       $g = "Abc";

 

//下面用isset()函數來測試

//isset()函數是用來判斷變數是不是有存在,如果有就回傳 1(true),如果沒有就回傳空值

//變數不存在為 FALSE

       echo "a=".isset($a)."<br>";

//變數存在,且值為NULL,則 FALSE;對isset來說,把變數值設為 NULL 就等於變數不存在,因此會回傳空值

       echo "b=".isset($b)."<br>"; 

//變數存在,且值為0,則 TURE 

       echo "c=".isset($c)."<br>"; 

//變數存在,且值為1,則 TURE

       echo "d=".isset($d)."<br>";

//變數存在,但是值是空字串,則 TURE

       echo "e=".isset($e)."<br>"; 

//變數存在,且值不為NULL,則為 TRUE

       echo "g=".isset($g)."<br>";

 

//再來用empty()函數來測試

//empty()函數用來判斷"值"是不是空的,如果沒有就回傳 1(true),如果有"值"就不回傳

//變數不存在為 TURE

       echo "a=".empty($a)."<br>";

//變數存在,且值為NULL,則 TURE

       echo "b=".empty($b)."<br>";

//變數存在,且值為0,則 TURE,無論是不是用字串("0")的形式去定義,都算是空值

       echo "c=".empty($c)."<br>";

//變數存在,且值為1,則 FALSE

       echo "d=".empty($d)."<br>";

//變數存在,但是值是空字串,則 TURE

       echo "e=".empty($e)."<br>";

//變數存在,且值不為NULL,則為 FALSE

       echo "g=".empty($g)."<br>";

 

上述的測試範例有幾個特別的點,要特別注意

1. 變數值為NULL的時候,isset會把變數當成不存在;但empty不會

2. 變數值為0的時候,isset判斷的是變數,所以回傳true;但是empty會把0當成空值,所以也會回傳true

3. 變數值為空字串的時候,isset判斷的是變數,所以回傳true;empty判斷的是值,所以回傳true

 

所以在遇到這三種狀況的時候要小心使用

不要被它們三個傢伙誤導了...

(碎碎念:媽呀~寫這篇文章快想瘋了@@)

 

 

如果覺得對你有幫助的話. 麻煩幫小弟按個讚哦~

文章標籤
創作者介紹

史丹利愛碎念

newaurora 發表在 痞客邦 PIXNET 留言(7) 人氣()


留言列表 (7)

發表留言
  • PHP新手
  • 非常清晰,有條理 的分析, 對於新手有很大的幫助
    感謝!
  • 謝謝~

    newaurora 於 2015/10/22 23:30 回覆

  • PHP
  • 對初學者有很大的幫助。
  • 謝謝~

    newaurora 於 2017/01/30 14:48 回覆

  • 認字特工
  • TRUE寫錯啦哈哈
  • josong816
  • 寫得很好 受益良多 感恩!
  • merumeru
  • 您好~我將解析欄位的功能寫成一個函式
    希望判斷欄位如果不存在 , 回傳一個預設值0

    直接Call isset( $json_object->Head ) 的話是沒問題的
    但是Call 函式時 check_json_prop( $json_object->Head );
    如果是不存在的欄位他這邊就先Error了, 想請問大大有其他解法嗎@@?

    $pic = check_json_prop( $json_object->Head ); //欄位存在 會Work
    $pic = check_json_prop( $json_object->Headd ); //無欄位 報錯

    // 檢查欄位存在
    function check_json_prop( $_property) {
    if( isset( $_property) ){
    return $_property;
    }else{
    return 0;
    }
    }
  • fafa
  • 有幫助--謝謝
  • 鯨魚
  • 感謝大大><借我分享一下
    會附上出處的 :)