empty與isset在php中一個是為空,另一個判斷是是否為一個存在的變量了,下面小編來給各位同學介紹php中empty與isset區(qū)別,歡迎各位同學進入參考.

empty是判斷變量值是非空或非零的值,對應空定義包括:“”(空字符串)、0、“0”、NULL、FALSE、array()和$var(只聲明但未賦值),也就是說當變量值為上述這些,empty返回TRUE,其他的都返回FALSE.

isset是檢測變量是否設置,并且不是 NULL,變量設置可以從幾個方面來說,1:最簡單的就是變量是否先聲明和賦值;2:array中是否存在對應的index或key;3:object中是否存在對應的屬性。

從上面的兩個function定義可以看到,在某些情況下,兩者可以公用,但其區(qū)別還是很大的,另外它們都只能檢測變量,檢測任何非變量的東西都將導致解析錯誤,例如直接檢查另一個function的返回值(empty(otherFunction())),你將看到“Fatal error: Can’t use function return value in write context in”這樣的錯誤.

另外isset可以一次檢查多個變量,例如:isset($var1, $var2, $var3),當這三個值分別的isset都為TRUE結果為TRUE,否則結果為FALSE.

測試代碼如下:

  1. $sep = "<br />"
  2.  
  3. echo 'test undeclared var empty : '
  4. var_dump(emptyempty($var)); // TRUE 
  5. echo $sep . 'test undeclared var isset : '
  6. var_dump(isset($var)); // FALSE 
  7.  
  8. $var
  9. echo $sep . 'test declared var but no set value empty : '
  10. var_dump(emptyempty($var)); // TRUE 
  11. echo $sep . 'test declared var but no set value isset : '
  12. var_dump(isset($var)); // FALSE, 變量申明未賦值,默認值為NULL 
  13.  
  14. $var = NULL; 
  15. echo $sep . 'test declared var and set value NULL empty : '
  16. var_dump(emptyempty($var)); // TRUE 
  17. echo $sep . 'test declared var and set value NULL isset : '
  18. var_dump(isset($var)); // FALSE, 變量申明賦值為NULL 
  19.  
  20. $var1 = ''$var2 = '0'$var3 = 0; $var4 = FALSE; $var5 = array(); 
  21. //開源代碼phpfensi.com 
  22. echo $sep . 'test '' empty : '
  23. var_dump(emptyempty($var1)); // TRUE 
  24. echo $sep . 'test '0' empty : '
  25. var_dump(emptyempty($var2)); // TRUE 
  26. echo $sep . 'test 0 empty : '
  27. var_dump(emptyempty($var3)); // TRUE 
  28. echo $sep . 'test FALSE empty : '
  29. var_dump(emptyempty($var4)); // TRUE 
  30. echo $sep . 'test array() empty : '
  31. var_dump(emptyempty($var5)); // TRUE 
  32. echo $sep . 'test '', '0', 0, FALSE, array() isset : '
  33. var_dump(isset($var1$var2$var3$var4$var5)); // TRUE,  變量申明并賦值為空字符串 

輸出的結果為:

  1. test undeclared var emptyempty : bool(true) 
  2. test undeclared var isset : bool(false) 
  3. test declared var but no set value emptyempty : bool(true) 
  4. test declared var but no set value isset : bool(false) 
  5. test declared var and set value NULL emptyempty : bool(true) 
  6. test declared var and set value NULL isset : bool(false) 
  7. test '' emptyempty : bool(true) 
  8. test '0' emptyempty : bool(true) 
  9. test 0 emptyempty : bool(true) 
  10. test FALSE emptyempty : bool(true) 
  11. test array() emptyempty : bool(true) 
  12. test '''0', 0, FALSE, array() isset : bool(true) 

比如檢測 $id 變量,當 $id=0 時,用empty() 和 isset() 來檢測變量 $id 是否已經配置,兩都將返回不同的值—— empty() 認為沒有配置,isset() 能夠取得 $id 的值,代碼如下:

  1. $id=0; 
  2.    emptyempty($id)?print "It's empty .":print "It's $id .";  
  3.      //結果:It's empty . 
  4.    print "<br>"
  5.    !isset($id)?print "It's empty .":print "It's $id ."
  6.      //結果:It's 0 . 

這意味著,我們在使用變量處理函數時,當該變量可能出現(xiàn)0的值,使用 empty() 要小心,這個時候用 isset 取代它更明智一些,當一個php頁面的 URL 尾部參數出現(xiàn) id=0 時,比如:test.php?id=0,試比較,代碼如下:

if(empty($id)) $id=1; - 若 id=0,id 也會為1

if(!isset($id)) $id=1; - 若 id=0,id 不會為1

可分開運行以下代碼檢測上述推斷,代碼如下:

  1. if(emptyempty($id)) $id=1; 
  2.    print $id// 得到 1 
  3.  
  4.    if(!isset($id)) $id=1; 
  5.    print $id//得到 0
轉載請注明來源:再談php中empty與isset區(qū)別詳解

  哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網站,并且能夠搭建符合百度排名規(guī)范的網站基底,使您的網站無需額外費用,即可穩(wěn)步提升排名至首頁。歡迎體驗最佳的哈爾濱網站建設