2012-06-01 202 views
8

這是竊聽我很長一段時間,找不到任何答案的問題相反的順序... 注意的它是由Zend Framework的開發人員使用頗多,PHP - 在if語句

是什麼以下兩個「if」語句之間的區別? :

if (null === $this->user) { ... } 

if ($this->user === null) { ... } 

對我來說,第一個看起來有點古怪;對於答案

感謝。

回答

13

這不是方式腳本的差異的作品,它只是一個編碼標準,所以建議使用這種方式的建議

原因:

if (null == $this->user) 

是事實,如果你輸錯,寫=代替==你會得到一個錯誤,而

($this->user = null) 

代替

($this->user == null) 

作品,但會導致莫名其妙的錯誤(分配和最終值被評估爲布爾而不是比較)

,我想它只是擴展爲一個習慣,嚴格的比較運算符(===)

更新:因爲我發現在這個線程上還有一些活動,甚至在我發佈答案後的3年中,我的數字d我會添加一些我忘記提及的東西。這種符號被稱爲yoda conditions,您可以在this wikipedia page上閱讀更多關於它的信息。

+1

謝謝!死簡單,但無法找到任何答案... – alchemication

+0

@alchemication我很高興它有幫助,這是一個很好的問題+1 – mishu

+0

也聽起來像是一個非常好的理由,使用'is_null($ var)'或'!is_null $ var)'儘可能實用。做出猜測工作。 – RockyFord

1

比較值時順序沒有差別。

某人讀取或寫入這樣的代碼可能更容易,但對我而言,這與從右向左書寫相同。

1

我認爲這種比較元素順序是爲了防止if語句中的意外分配。

1

結果將是相同的,但是,第二個是合乎邏輯的。 你要檢查,如果變量爲空,如果不爲NULL變量... 這樣做的原因是各地在這裏描述的其他方式: http://umumble.com/blogs/Programming/321/

1

這些被稱爲yoda條件。

的想法是,如果你第一次(如假,空,真或任何短),對於一個人掃描的發言,並迅速地瞭解病情的意圖更容易把值。

此外,什麼祕術說:)

1

如果你不小心寫:

if (null = $this->user) { ... } 

你會得到一個語法錯誤。

如果你不小心寫:

if ($this->user = null) { ... } 

你會尋找了很長時間的一個原因的應用程序的奇怪行爲。

+0

好的,非常感謝。 這就是我一直在尋找的! – alchemication

4

這是編寫if聲明的好習慣。考慮以下代碼:

if (10 == $var) { 
    echo 'true'; 
} else { 
    echo 'false'; 
} 

如果你忘了一個等號:

if (10 = $var) { } 

然後PHP會產生解析錯誤,所以你知道你錯過了一個=,你可以修復它。但是,此代碼:

if ($var = 10) { } 

將分配10到$var並始終評估爲真實條件。無論$var的內容是什麼,上面的代碼總會回顯'真實',而且很難找到這個錯誤。

+0

好吧,有道理的是,我認爲Eclipse在if語句中突出顯示了一個單獨的「=」作爲錯誤,但是Net Bean並不......因此這可能是一種很好的練習,謝謝! – alchemication