[PHP]一張圖片完全弄清isset empty函數區別!!!

簡單談一下isset和empty的區別?

若是你是在面試,碰巧面試官提了這個問題。你能夠這樣回答:php

  • 若是變量值爲0、空字符串、空數組等等,empty認爲它是空的,而isset認爲它不是空的。
  • 若是變量不存在,isset和empty都認爲它是空的。
  • 建議使用isset函數,避免使用empty掉坑。

若是你想了解他們之間更詳細的區別,請繼續往下看...面試

一張圖完全弄清

用ProcessOn畫了一張圖片數組

注意函數

  • 爲了方便對比, 這裏對empty函數取反了。注意是 !empty()
  • ""、0、"0"、FALSE、array()...該條件沒有補全,能夠自行測試
  • 若是你看上去一頭霧水,請先暫時跳過這一小節

1.png(PNG 圖像,1263x389 像素)

這就是isset empty對應不一樣變量時的返回結果,二者的區別都匯聚在這張圖片中了。測試

綠色虛線框裏isset的表現,黃色虛線框裏是!empty的表現。能夠看出,empty相比isset須要判斷更多的條件,才能肯定返回結果。spa

若是你有些許地方不明白,或者記不住所有細節。下面我來告訴你怎麼記住這張圖片的全部內容!.net

礦泉水的思考

想象一下,如今桌子上有一個礦泉水瓶。瓶子可能有這4種情況:code

  • 水瓶:瓶子裏有水
  • 空氣瓶:水喝完了,瓶子裏面只有空氣
  • 真空瓶:瓶子拿去抽了真空,裏面啥都沒有
  • 桌面上沒有瓶子

把變量類比成礦泉水瓶,對應4種狀態:對象

  • 通常值:存儲單元裏面放着通常的值
  • 空氣值:變量爲 ""、0、"0"、FALSE、array()...
  • 真空值:變量爲NULL
  • 變量不存在或沒有定義

小學生empty 和 中學生isset

假設咱們能夠用isset empty函數要判斷一個礦泉水瓶是否是空的,會有這樣的結果:blog

  • 若是是空氣瓶,那麼empty認爲它是空的(它看起來的確是空的啊!),而isset卻認爲它不是空的(它有空氣啊!)
  • 若是是真空瓶,那麼empty isset都會認爲它是空的
  • 若是是水瓶,那麼empty isset都會認爲它不是空的
能夠看出,empty就是一個不懂科學的小學生,覺得瓶子看起來是空的即是空瓶!果真仍是太年輕啊~

而isset是個學過物理的中學生,明白「真空」的概念——他清楚瓶子裏還有空氣!

因此上面三種狀況中第1條,老司機isset經驗豐富,得出了跟小學生empty不同的結論。

如今咱們能夠知道,若是用這兩個函數來判斷變量,結果會是這樣:

  • 若是是空氣值( ""、0、"0"、FALSE、array()...),那麼empty認爲它是空的,而isset認爲它不是空的
  • 若是是真空值(NULL),那麼empty isset都認爲它是空的
  • 若是是通常值(除了這兩種狀況,也就是說瓶子裏面有水),那麼empty isset都認爲它不是空的

這就是在一開始給出的面試回答。如今,理解起來是否是很容易呢?

詳細對比

isset()函數

格式:bool isset ( mixed var [, mixed var [, ...]] )

功能:檢測變量是否設置

返回值:

若變量不存在則返回 FALSE
若變量存在且其值爲NULL,也返回 FALSE
若變量存在且值不爲NULL,則返回 TURE
同時檢查多個變量時,每一個單項都符合上一條要求時才返回 TRUE,不然結果爲 FALSE

更多說明:
使用 unset() 釋放變量以後,它將再也不是 isset()。
PHP函數isset()只能用於變量,傳遞任何其它參數都將形成解析錯誤。
檢測常量是否已設置可以使用 defined() 函數。

empty()函數

格式:bool empty ( mixed var )

功能:檢查一個變量是否爲空

返回值:

若變量不存在則返回 TRUE
若變量存在且其值爲""、0、"0"、NULL、FALSE、array()、var $var以及沒有任何屬性的對象,則返回 TURE
若變量存在且值不爲""、0、"0"、NULL、FALSE、array()、var $var以及沒有任何屬性的對象,則返回 FALSE

更多說明:
empty()的返回值=!(boolean) var,但不會由於變量未定義而產生警告信息。參見轉換爲布爾值獲取更多信息。
empty() 只能用於變量,傳遞任何其它參數都將形成Paser error而終止運行。
檢測常量是否已設置可以使用 defined() 函數。

最完整的區別

如今咱們把礦泉水和變量放到一塊兒,畫出最完整的區別圖:

若是能你能讀懂前文內容,你將會完全理解這兩張圖,日後isset empty區別就印刻在腦海裏了。若是還有人問你二者區別,立刻甩出這種圖~

1.png(PNG 圖像,1263x389 像素)

2.png(PNG 圖像,1101x390 像素)

有興趣能夠往下閱讀,官方手冊給出的例子...

PHP 手冊

3.png(PNG 圖像,839x629 像素)

這是一張將empty isset if($var)區別的表格,從表格中咱們能夠發現:

  • isset() 返回值等同 !is_null()
  • empty() 返回值等同 !boolean($x)。if($x)實際上是先把變量轉換成boolean類型,再進行條件判斷

    若是$var不存在,if($x) 語句會讓php發生E_NOTICE級別異常,但不是致命錯誤,依舊能夠執行腳本;

    empty($x)和 isset($x)不會報告任何異常

參考

轉載

本文由1nFrastr編寫,轉載請註明出處!

相關文章
相關標籤/搜索