2012-03-24 61 views
0

是什麼2個語句之間的區別:if語句值位置

if (false === $variable) { 
    //do something 
} 

if ($variable === false) { 
    //do something 
} 

我個人使用的第二風格,但經常在我使用框架,它似乎總是碰上碼使用第一種風格。

是有區別(我懷疑這是一些舊的東西做類型)或者是這只是一個編碼習慣(它必須根植於東西雖然??)

如果不是,有什麼理由由於邏輯實際上是向後的,所以在第一種風格之後。

+0

可能的重複[爲什麼一些有經驗的程序員以這種方式編寫表達式?](http://stackoverflow.com/questions/3309089/why-do-some-experienced-programmers-write-expressions-this-way) – mario 2012-03-24 10:47:28

+0

可能的重複[php錯誤的地方在條件](http://stackoverflow.com/questions/9438043/php-false-place-in-condition) – mario 2012-03-24 10:48:24

回答

0

if ($foo = false)(注)是導致難以調試問題的典型錯字。因此,有些人更喜歡false == $foo,因爲當您嘗試將某些內容分配給false時,運行時會發出錯誤。

除此之外沒有區別。

0

如果您在左側放置了不能分配給它的值(文字,常量,函數調用等),那麼如果您不小心使用賦值運算符(=)而不是一個比較運算符,那麼你會得到一個錯誤,而不是一個難以追蹤的錯誤。

if (false = $variable) { // Error 
if ($variable = false) { // Valid code that doesn't do what you want 
0

此日期,以C編程。這是一種確保「編譯器」失敗的方法,如果您偶然使用=(賦值)而不是==或===(等於),因爲「false」不是左值(不能位於賦值的左側)

0

它源於此:中=代替:

if (false = $variable) 

語法錯誤

if ($variable = false) 

意外分配

0

它已經存在了一段時間。它來自偶然書面形式(由忘記一個=):

if (c = 1) { 
} 

這不分配,它實際上並沒有檢查c是否等於1。它分配1,然後它的計算結果爲1(所以if語句由於該錯誤而總是爲真)。通過書寫

if (1 == c) { 
} 

作爲一種習慣,你不能犯那個錯誤。如果在這種情況下你會忘記=,編譯器會發出警告,因爲不可能分配給文字1

0

實際上,兩個語句是等價的

所以,爲什麼把它寫這種方式或其他(?):

  • 儘量避免典型錯字if ($condition = false),而不是if ($condition == false)。在這種情況下,你的第二個版本會導致難以調試的問題,而首先將拋出一個錯誤
  • 要強制條件語句的兩個部分之一是評估第一(最右邊)