這是竊聽我很長一段時間,找不到任何答案的問題相反的順序... 注意的它是由Zend Framework的開發人員使用頗多,PHP - 在if語句
是什麼以下兩個「if」語句之間的區別? :
if (null === $this->user) { ... }
if ($this->user === null) { ... }
對我來說,第一個看起來有點古怪;對於答案
感謝。
這是竊聽我很長一段時間,找不到任何答案的問題相反的順序... 注意的它是由Zend Framework的開發人員使用頗多,PHP - 在if語句
是什麼以下兩個「if」語句之間的區別? :
if (null === $this->user) { ... }
if ($this->user === null) { ... }
對我來說,第一個看起來有點古怪;對於答案
感謝。
這不是方式腳本的差異的作品,它只是一個編碼標準,所以建議使用這種方式的建議
原因:
if (null == $this->user)
是事實,如果你輸錯,寫=代替==你會得到一個錯誤,而
($this->user = null)
代替
($this->user == null)
作品,但會導致莫名其妙的錯誤(分配和最終值被評估爲布爾而不是比較)
,我想它只是擴展爲一個習慣,嚴格的比較運算符(===)
更新:因爲我發現在這個線程上還有一些活動,甚至在我發佈答案後的3年中,我的數字d我會添加一些我忘記提及的東西。這種符號被稱爲yoda conditions
,您可以在this wikipedia page上閱讀更多關於它的信息。
比較值時順序沒有差別。
某人讀取或寫入這樣的代碼可能更容易,但對我而言,這與從右向左書寫相同。
我認爲這種比較元素順序是爲了防止if語句中的意外分配。
結果將是相同的,但是,第二個是合乎邏輯的。 你要檢查,如果變量爲空,如果不爲NULL變量... 這樣做的原因是各地在這裏描述的其他方式: http://umumble.com/blogs/Programming/321/
這些被稱爲yoda條件。
的想法是,如果你第一次(如假,空,真或任何短),對於一個人掃描的發言,並迅速地瞭解病情的意圖更容易把值。
此外,什麼祕術說:)
如果你不小心寫:
if (null = $this->user) { ... }
你會得到一個語法錯誤。
如果你不小心寫:
if ($this->user = null) { ... }
你會尋找了很長時間的一個原因的應用程序的奇怪行爲。
好的,非常感謝。 這就是我一直在尋找的! – alchemication
這是編寫if
聲明的好習慣。考慮以下代碼:
if (10 == $var) {
echo 'true';
} else {
echo 'false';
}
如果你忘了一個等號:
if (10 = $var) { }
然後PHP會產生解析錯誤,所以你知道你錯過了一個=
,你可以修復它。但是,此代碼:
if ($var = 10) { }
將分配10到$var
並始終評估爲真實條件。無論$var
的內容是什麼,上面的代碼總會回顯'真實',而且很難找到這個錯誤。
好吧,有道理的是,我認爲Eclipse在if語句中突出顯示了一個單獨的「=」作爲錯誤,但是Net Bean並不......因此這可能是一種很好的練習,謝謝! – alchemication
謝謝!死簡單,但無法找到任何答案... – alchemication
@alchemication我很高興它有幫助,這是一個很好的問題+1 – mishu
也聽起來像是一個非常好的理由,使用'is_null($ var)'或'!is_null $ var)'儘可能實用。做出猜測工作。 – RockyFord