2013-12-13 63 views
3

我不明白的是,在下面的代碼...

$foo = TRUE; 
$bar = 1; 

if ($foo === TRUE) 
{ 
    echo 'Foo'; 
} 

if ($bar === TRUE) 
{ 
    echo 'Bar'; 
} 

...將只打印因爲富類型比較。

不過,我的問題是關於...

if ($foo === TRUE) 
{ 
    echo 'Foo1'; 
} 
if (TRUE === $foo) 
{ 
    echo 'Foo2'; 
} 

...因爲據我所知,他們是相同的,但我記得讀書的地方,他們都沒有。我只是在夢想PHP的奇怪的東西,或者實際上有區別嗎?

謝謝!

+0

其中一個比另一個更愚蠢。 – cHao

+6

這裏雅去:http://en.wikipedia.org/wiki/Yoda_conditions :-D –

+1

謝謝火箭!所以我在夢想着星球大戰:D –

回答

6

這是同樣的 - 它只是,如果你把在右側$ foo的你可以安全的從那個可怕的錯誤,當你只使用一個「=」號。所以使用「左邊比較」是一個很好的做法。試想一下:

if($password=="secret_thing") {...} 

if($password="secret_thing") {...} 

在這裏看到了問題? :) 但使用上rightside變量:

if("secret_thing" = $password) {...} 

...發生的最糟糕的事情是,你得到一個錯誤信息。沒什麼大不了的。比任何人嘗試任何密碼都好得多,是吧?

另外,您可以使用比較函數來提高可讀性。但是那個需要一些額外的微秒,所以在高性能的情況下,只要堅持良好的舊「==」/「===」標誌。

+1

閱讀「Yoda_conditions」wiki,似乎有些人可能會認爲這是一種不好的做法,因爲缺乏可讀性。不過,Imho似乎是一種很好的做法。 –

+1

那麼你把價值放在左邊只是爲了增加你自己的錯誤的可見性?聽起來很腥...... – thelolcat

+0

在某些情況下這是一個很好的例子。還有其他一些方法仍然可以安全地維護(甚至改進)可讀性,例如,可以編寫一個簡單的函數來比較事物。那麼你有類似「如果(匹配($密碼,」booo「))」這是相當自我解釋。 – dkellner

3

他們都是一模一樣的

同樣的正是他們;)

+2

http://en.wikipedia.org/wiki/Yoda_conditions :-D –

相關問題