![](/img/trans.png)
[英]PHP: if (!$val) VS if (empty($val)). Is there any difference?
[英]if($val) vs. if($val != “”) vs. if(!empty($val)) — which one?
我看到很多人使用各種不同的方法來檢查變量是否為空,確實似乎沒有達成共識。 我聽說if($foo)
與if(!empty($foo))
或if($foo != "")
完全相同。 這是真的?
我意識到這是一個非常簡單的問題,但我真的很想知道。 有什么不同嗎? 我應該使用哪種方法?
if($foo != "")
if($foo)
大部分時間等於if($foo)
,但並非總是如此 。
要查看差異的位置,請考慮比較運算符行為以及第一種情況下的字符串規則 轉換以及第二種情況的轉換為布爾規則 。
我發現的是:
$foo === array()
, if($foo != "")
測試將成功(數組是“大於”字符串),但if($foo)
測試將失敗(空數組轉換為布爾值false
) $foo === "0"
(一個字符串), if($foo != "")
測試將再次成功(顯然),但if($foo)
測試將失敗(字符串"0"
轉換為布爾值false
) $foo
是一個從空標簽創建的SimpleXML對象, if($foo != "")
測試將再次成功(對象是“大於”字符串),但if($foo)
測試將失敗(這樣的對象)轉換為布爾值false
) 看看行動的差異 。
測試的首選方法是if(!empty($foo))
,它與上面的不完全相同:
if($foo != "")
(IMHO簡直太可怕)的不一致性的影響。 $foo
,則不會生成E_NOTICE
,這是其優於if($foo)
主要優勢。 這里有一個警告:如果$foo === '0'
(一個長度為1的字符串),那么empty($foo)
將返回true
,這通常是(但可能並不總是 )你想要的。 這也是if($foo)
的情況。
最后,當您要測試特定類型的值時,必須對上述內容進行例外處理。 例如, strpos
可能返回0
並且也可能返回false
。 這兩個值都將失敗if(strpos(...))
測試,但它們具有完全不同的含義。 在這些情況下,使用相同運算符的測試依次為: if(strpos() === false)
。
不,並非總是如此。 當你執行if($foo)
PHP將變量轉換為Boolean。 空字符串,零整數或空數組將為false
。 有時這可能是一個問題。
你應該總是盡量使用最具體的比較,如果你期望一個字符串可以是空的使用if($foo==='')
(注意三個等號)。 如果您期望(布爾值)false或資源(例如來自數據庫查詢),請使用if($foo===false){...} else {...}
empty($ foo)應該在所有這些情況下返回true:0,“”,NULL。
有關更完整的列表,請查看此頁面: http : //php.net/manual/en/function.empty.php
不,這不相等。 如果未定義變量,則不帶empty
表達式將生成有關未定義變量的通知。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.