若是你是在面試,碰巧面試官提了這個問題。你能夠這樣回答:php
若是你想了解他們之間更詳細的區別,請繼續往下看...面試
用ProcessOn畫了一張圖片數組
注意:函數
- 爲了方便對比, 這裏對empty函數取反了。注意是
!empty()
- ""、0、"0"、FALSE、array()...該條件沒有補全,能夠自行測試
- 若是你看上去一頭霧水,請先暫時跳過這一小節
這就是isset empty對應不一樣變量時的返回結果,二者的區別都匯聚在這張圖片中了。測試
綠色虛線框裏isset
的表現,黃色虛線框裏是!empty
的表現。能夠看出,empty相比isset須要判斷更多的條件,才能肯定返回結果。spa
若是你有些許地方不明白,或者記不住所有細節。下面我來告訴你怎麼記住這張圖片的全部內容!.net
想象一下,如今桌子上有一個礦泉水瓶。瓶子可能有這4種情況:code
- 水瓶:瓶子裏有水
- 空氣瓶:水喝完了,瓶子裏面只有空氣
- 真空瓶:瓶子拿去抽了真空,裏面啥都沒有
- 桌面上沒有瓶子
把變量類比成礦泉水瓶,對應4種狀態:對象
- 通常值:存儲單元裏面放着通常的值
- 空氣值:變量爲 ""、0、"0"、FALSE、array()...
- 真空值:變量爲NULL
- 變量不存在或沒有定義
假設咱們能夠用isset empty函數要判斷一個礦泉水瓶是否是空的,會有這樣的結果:blog
能夠看出,empty就是一個不懂科學的小學生,覺得瓶子看起來是空的即是空瓶!果真仍是太年輕啊~而isset是個學過物理的中學生,明白「真空」的概念——他清楚瓶子裏還有空氣!
因此上面三種狀況中第1條,老司機isset經驗豐富,得出了跟小學生empty不同的結論。
如今咱們能夠知道,若是用這兩個函數來判斷變量,結果會是這樣:
這就是在一開始給出的面試回答。如今,理解起來是否是很容易呢?
格式:bool isset ( mixed var [, mixed var [, ...]] )
功能:檢測變量是否設置
返回值:
若變量不存在則返回 FALSE
若變量存在且其值爲NULL,也返回 FALSE
若變量存在且值不爲NULL,則返回 TURE
同時檢查多個變量時,每一個單項都符合上一條要求時才返回 TRUE,不然結果爲 FALSE
更多說明:
使用 unset() 釋放變量以後,它將再也不是 isset()。
PHP函數isset()只能用於變量,傳遞任何其它參數都將形成解析錯誤。
檢測常量是否已設置可以使用 defined() 函數。
格式: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區別就印刻在腦海裏了。若是還有人問你二者區別,立刻甩出這種圖~
有興趣能夠往下閱讀,官方手冊給出的例子...
這是一張將empty isset if($var)區別的表格,從表格中咱們能夠發現:
empty() 返回值等同 !boolean($x)。if($x)實際上是先把變量轉換成boolean類型,再進行條件判斷
若是$var不存在,if($x) 語句會讓php發生E_NOTICE級別異常,但不是致命錯誤,依舊能夠執行腳本;empty($x)和 isset($x)不會報告任何異常
本文由1nFrastr編寫,轉載請註明出處!