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

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

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

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

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

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

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

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

一張圖徹底弄清

用ProcessOn畫了一張圖片

注意

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

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

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

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

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

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

礦泉水的思考

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

  • 水瓶:瓶子裡有水

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

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

  • 案頭上沒有瓶子

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

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

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

  • 真空值:變數為NULL

  • 變數不存在或沒有定義

小學生empty 和 中學生isset

假設我們可以用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區別就印刻在腦海裡了。如果還有人問你兩者區別,馬上甩出這種圖~

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

PHP 手冊

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

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

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

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

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

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.