2013-04-07 32 views
-3

我所知道的,而條件子句中的以下分配將工作:使用作業而不是平等 - 好的或不好的做法?

while ($info=mysql_fetch_array($data_jurisdiction)) 
{ 
//some stuff 
} 

$info除非轉讓的右側返回被分配一定的價值和而條件將循環一個FALSENULL0array()

問題:在語言語法需要相等性檢查的情況下做一個任務是好還是不好的做法? Zend Studio立即指出這是一個警告。每種方法的優缺點是什麼?

+0

「它是好還是壞的做法」 - 主觀 – Quentin 2013-04-07 18:55:49

+0

「語言語法期望平等檢查」 - 語言期望可以轉換爲布爾值的語句。這是慣例,而不是在那裏進行平等檢查的語法。 – Quentin 2013-04-07 18:56:32

+0

不一定。這可能有一些客觀的利弊。例如,Zend Studio將其標記爲警告可能表明這是不好的做法。當然,這樣做有一個客觀的理由嗎? – snoopy76 2013-04-07 18:58:03

回答

0

它常常被人忽視,因爲它會混淆潛在的問題,而且對於除了自己以外的開發人員有時候可能會更難閱讀。這就是說,我經常這樣做,但在轉讓和檢查方式如:

while(false !== ($info = mysql_fetch_array($result))) { 

} 
-1

你已經發現了什麼問題已經在你的問題。

問題的解決方案通常是使用迭代器模式。

$jurisdictions = new MysqlResultIterator($data_jurisdiction); 

foreach ($jurisdictions as $info) 
{ 
    // some stuff 
} 

foreach每個非mysql_*數據庫庫的支持是直接可用的結果集。

Foreach使得沒有結果和下一個結果之間的區別更加明顯。迭代器模式允許表示將它分配給結果變量的有效性。

+0

是的,我意識到還有其他方式來表達代碼。我很好奇在預期表達式時使用賦值的做法。 – snoopy76 2013-04-07 19:19:44

+0

賦值也是一個表達式。對於循環結果集,我強烈推薦'foreach'。 – hakre 2013-04-07 19:21:04

+1

這不是一個「foreach」問題。同樣的問題將適用於這樣的事情:'if($ a = $ b)'(在條件中放置一個賦值)。 – snoopy76 2013-04-07 19:32:23

0

這個問題的說法是錯誤的。

沒有「分配而不是平等」。 IF語句(以及其他控制流操作符)不僅限於比較運算符,還可以評估幾乎任何PHP表達式。語言並不以任何方式「期待平等檢查」。語言只需要一個可以轉換爲布爾值並與TRUE進行比較的值。
運營商和比較運營商之間沒有必要的聯繫。這是兩個不同的運營商,可以獨立使用。

I.e.比較不若:

$var = $a == $b; // $var now contains boolean value 

和相反:

if ($a + $b) // addition 
if (isTrue()) // function 
if ($var) // variable 

每個人的表情從上面進行評估,結果轉換爲布爾值,這布爾通過IF語句進行檢查。

所以,只要你明白你在做什麼就沒問題。

+0

爲什麼Zend Studio認爲謹慎地給我一個關於這種編碼風格的警告? – snoopy76 2013-04-07 19:18:41

+0

@ snoopy76可能因爲往往不是,這是一個錯誤?這不是一個錯誤,因爲這是一種糟糕的風格,但是錯誤是因爲編寫條件的人可能確實意味着比較而不是分配。 – hvd 2013-04-07 19:25:04

相關問題