首頁  >  文章  >  後端開發  >  一張圖片弄清isset和empty函數的差別

一張圖片弄清isset和empty函數的差別

不言
不言原創
2018-07-06 15:50:453964瀏覽

這篇文章主要介紹了關於一張圖片弄清楚isset和empty函數的區別,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

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

如果你在面試,碰巧面試官提了這個問題。你可以這樣回答:

  • 如果變數值為0、空字串、空數組等等,empty認為它是空的,而isset認為它不是空的。

  • 如果變數不存在,isset和empty都認為它是空的。

  • 建議使用isset函數,避免使用empty掉坑。

如果你想了解他們之間更詳細的區別,請繼續往下看...

一張圖徹底弄清楚

用ProcessOn畫了一張圖片

注意

  • 為了方便對比, 這裡對empty函數取反了。注意是!empty()

  • ""、0、"0"、FALSE、array()...該條件沒有補全,可以自行測試

  • 如果你看起來一頭霧水,請先暫時跳過這一小節

一張圖片弄清isset和empty函數的差別

這就是isset empty對應不同變數時的回傳結果,兩者的差異都匯聚在這張圖片中了。

綠色虛線框裡isset的表現,黃色虛線框裡是!empty的表現。可以看出,empty相比isset需要判斷更多的條件,才能確定回傳結果。

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

礦泉水的思考

想像一下,現在桌上有一個礦泉水瓶。瓶子可能有這4種狀況:

  • 水瓶:瓶子裡有水

  • 空氣瓶:水喝完了,瓶子裡面只有空氣

  • 真空瓶:瓶子拿去抽了真空,裡面啥都沒有

  • 桌面上沒有瓶子

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

  • 一般值:儲存單元裡面放著一般的值

  • 空氣值:變數為""、0、"0"、FALSE、array()...

  • 真空值:變數為NULL

  • 變數不存在或沒有定義

#小學生empty 和中學生is​​set

假設我們可以用isset empty函數要判斷一個礦泉水瓶是不是空的,會有這樣的結果:

  • 如果是空氣瓶,那麼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區別就印在腦海裡了。如果還有人問你兩者差別,馬上甩出這種圖~

一張圖片弄清isset和empty函數的差別

一張圖片弄清isset和empty函數的差別

#有興趣可以往下閱讀,官方手冊給的例子...

PHP 手冊

一張圖片弄清isset和empty函數的差別

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

  • isset() 傳回值等同!is_null()

  • #empty() 傳回值等同!boolean($x)。 if($x)其實是先把變數轉換成boolean類型,再進行條件判斷

    如果$var不存在,if($x) 語句會讓php發生E_NOTICE等級異常,但不是致命錯誤,依舊可以執行腳本;

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

以上就是本文的全部內容,希望對大家的學習有幫助,更多相關內容請關注PHP中文網!

相關建議:

以上是一張圖片弄清isset和empty函數的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn