2011-08-22 37 views
12

我想知道以下兩種情況有什麼區別,並建議哪一種?

$val = 0; 

if (!$val) { 
    //True 
} 

if (empty($val) { 
    //It's also True 
} 

回答

21

看看PHP type comparison table

如果您查看錶格,您會注意到對於所有情況,empty($x)!$x相同。所以它涉及到處理未初始化的變量。 !$x創建E_NOTICE,而empty($x)不創建。

+0

+1。還要注意,這與'!= [評估$ val的布爾結果]'相同,因此第一個表的最後一列主要是您應該查看的內容。 – rockerest

+0

+1尼斯在比較表上找到。 –

+0

謝謝,這就是我需要知道的。所以我想空($ x)是更安全的方法。我認爲差異是微不足道的表現明智的權利? – Bachx

4

如果您使用空,並且變量從未設置/創建,則不會引發警告/錯誤。

3

讓我們看到:

empty documentation:

下面的事情被認爲是empty

  • ""(空字符串)
  • 00爲整數)
  • 0.00爲float)
  • "0"0作爲字符串)
  • NULL
  • FALSE
  • array()(空數組)
  • var $var;(變量聲明,但沒有在一個值類)

Booleans documentation

當轉換爲布爾值,下面的值被認爲是FALSE

  • 布爾FALSE本身
  • 整數0(零)
  • 浮子0.0(零)
  • 空字符串,字符串"0"
  • 用零個元素
  • 零個成員變量的對象的陣列(PHP 4只)
  • 特殊類型NULL(包括尚未設定的變量)
  • SimpleXML對象從空標籤創建

似乎唯一的區別(關於結果值)是如何處理一個SimpleXML實例。其他的一切似乎都給出了相同的結果(如果你反轉布爾轉換當然)。

+0

那麼結論是什麼?從列表中,布爾似乎是更強大的檢查... –

+0

這是不正確的。在PHP shell中進行快速測試,發現'empty'像'!'一樣處理空的'SimpleXMLElement'實例;這只是'empty'文檔中的一個錯誤,它們在那裏沒有提及。 –

相關問題