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,則 TRUE
echo "c=".isset($c)."<br>";
//變數存在,且值為1,則 TRUE
echo "d=".isset($d)."<br>";
//變數存在,但是值是空字串,則 TRUE
echo "e=".isset($e)."<br>";
//變數存在,且值不為NULL,則為 TRUE
echo "g=".isset($g)."<br>";
//再來用empty()函數來測試
//empty()函數用來判斷"值"是不是空的,如果沒有就回傳 1(true),如果有"值"就不回傳
//變數不存在為 TRUE
echo "a=".empty($a)."<br>";
//變數存在,且值為NULL,則 TRUE
echo "b=".empty($b)."<br>";
//變數存在,且值為0,則 TRUE,無論是不是用字串("0")的形式去定義,都算是空值
echo "c=".empty($c)."<br>";
//變數存在,且值為1,則 FALSE
echo "d=".empty($d)."<br>";
//變數存在,但是值是空字串,則 TRUE
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
所以在遇到這三種狀況的時候要小心使用
不要被它們三個傢伙誤導了...
(碎碎念:媽呀~寫這篇文章快想瘋了@@)
如果覺得對你有幫助的話. 麻煩幫小弟按個讚哦~
其他相關文章參考:
PHP __construct(建構子)和 __destruct(解構子) 使用方法
static變數、public變數、private變數、protected變數的使用方法-PHP

非常清晰,有條理 的分析, 對於新手有很大的幫助 感謝!
謝謝~
對初學者有很大的幫助。
謝謝~
TRUE寫錯啦哈哈
哈哈哈~謝謝大大指導
寫得很好 受益良多 感恩!
謝謝
您好~我將解析欄位的功能寫成一個函式 希望判斷欄位如果不存在 , 回傳一個預設值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; } }
有幫助--謝謝
謝謝
感謝大大><借我分享一下 會附上出處的 :)
OK~謝謝