這篇文章主要介紹了關於一張圖片弄清楚isset和empty函數的區別,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
如果你在面試,碰巧面試官提了這個問題。你可以這樣回答:
如果變數值為0、空字串、空數組等等,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
變數不存在或沒有定義
假設我們可以用isset empty函數要判斷一個礦泉水瓶是不是空的,會有這樣的結果:
如果是空氣瓶,那麼empty認為它是空的(它看起來的確是空的啊!),而isset卻認為它不是空的(它有空氣啊!)
#如果是真空瓶,那麼empty isset都會認為它是空的
如果是水瓶,那麼empty isset都會認為它不是空的
可以看出,empty就是一個不懂科學的小學生,以為瓶子看起來是空的便是空瓶!果然還是太年輕啊~而isset是個學過物理的中學生,明白「真空」的概念-他清楚瓶子裡還有空氣!
所以上面三種情況中第1條,老司機isset經驗豐富,得出了跟小學生empty不一樣的結論。
現在我們可以知道,如果用這兩個函數來判斷變量,結果會是這樣:
如果是空氣值( " "、0、"0"、FALSE、array()...),那麼empty認為它是空的,而isset認為它不是空的
如果是真空值(NULL),那麼empty isset都認為它是空的
#如果是一般值(除了這兩種情況,也就是說瓶子裡面有水),那麼empty isset都認為它不是空的
#這就是在一開始給出的面試回答。現在,理解起來是不是很容易呢?
格式: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)區別的表格,從表格中我們可以發現:
isset() 傳回值等同!is_null()
#empty() 傳回值等同!boolean($x)。 if($x)其實是先把變數轉換成boolean類型,再進行條件判斷
如果$var不存在,if($x) 語句會讓php發生E_NOTICE等級異常,但不是致命錯誤,依舊可以執行腳本;empty($x)和isset($x)不會報告任何異常
以上就是本文的全部內容,希望對大家的學習有幫助,更多相關內容請關注PHP中文網!
相關建議:
以上是一張圖片弄清isset和empty函數的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!