我想知道以下兩種情況有什麼區別,並建議哪一種?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
我想知道以下兩種情況有什麼區別,並建議哪一種?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
如果您查看錶格,您會注意到對於所有情況,empty($x)
與!$x
相同。所以它涉及到處理未初始化的變量。 !$x
創建E_NOTICE
,而empty($x)
不創建。
如果您使用空,並且變量從未設置/創建,則不會引發警告/錯誤。
讓我們看到:
下面的事情被認爲是
empty
:
""
(空字符串)0
(0
爲整數)0.0
(0
爲float)"0"
(0
作爲字符串)NULL
FALSE
array()
(空數組)var $var;
(變量聲明,但沒有在一個值類)
當轉換爲布爾值,下面的值被認爲是
FALSE
:
- 布爾
FALSE
本身- 整數
0
(零)- 浮子
0.0
(零)- 空字符串,字符串
"0"
- 用零個元素
- 零個成員變量的對象的陣列(PHP 4只)
- 特殊類型
NULL
(包括尚未設定的變量)SimpleXML
對象從空標籤創建
似乎唯一的區別(關於結果值)是如何處理一個SimpleXML
實例。其他的一切似乎都給出了相同的結果(如果你反轉布爾轉換當然)。
那麼結論是什麼?從列表中,布爾似乎是更強大的檢查... –
這是不正確的。在PHP shell中進行快速測試,發現'empty'像'!'一樣處理空的'SimpleXMLElement'實例;這只是'empty'文檔中的一個錯誤,它們在那裏沒有提及。 –
+1。還要注意,這與'!= [評估$ val的布爾結果]'相同,因此第一個表的最後一列主要是您應該查看的內容。 – rockerest
+1尼斯在比較表上找到。 –
謝謝,這就是我需要知道的。所以我想空($ x)是更安全的方法。我認爲差異是微不足道的表現明智的權利? – Bachx