2013-07-18 60 views
0

在我的代碼,我有這樣的比較:運算符優先級錯誤

$check_iter_C_sfavorito = ($tipo_iter_sfavorito[$id_loop][$k_tg] == 'C') AND (!(abs(@$delta_salto_check_sfavorito) < 0.001)); 

這導致爲真,即使:

($tipo_iter_sfavorito[$id_loop][$k_tg] == 'C') ====>>>> is true 

(!(abs(@$delta_salto_check_sfavorito) < 0.001)) ====>>>> is false 

雖然如果我使用運算符「& &」而不是「AND」,PHP運算符precedenc電子手段,這不應該給這個錯誤,因爲括號!


感謝您對「Mar * B *」的快速回答。我改變了代碼如下:

$check_iter_C_sfavorito = (($tipo_iter_sfavorito[$id_loop][$k_tg] == 'C') AND (!(abs(@$delta_salto_check_sfavorito) < 0.001))); 

...這是可以的!

回答

1

等效的

($check_iter_C_sfavorito = ($tipo_iter_sfavorito[$id_loop][$k_tg] == 'C')) AND (!(abs(@$delta_salto_check_sfavorito) < 0.001)); 

因爲,並且具有比

+0

親愛的馬克,謝謝!我想你先得到它。 – user1508429

+0

只有幾秒鐘了,我沒有給出如Marc –

1

它直接在文檔中所指定的分配(=)下的優先級:http://php.net/manual/en/language.operators.precedence.php

andor綁定在優先級低於=,所以你的聲明and被視爲

($foo = 'bar') AND 'baz'; 

請記住,在PHP中,賦值的結果是要賦值的值。這是標準如何「檢查數據庫失敗」的代碼工作:

$result = mysql_query($sql) or die(msyql_error()); 

因爲or結合比=下,該語句被解析爲:

($result = mysql_query($sql)) or die(mysql_error()); 

如果DB查詢失敗,則返回false ,它被分配給$ result。該分配的結果也是錯誤的,它會使用模板校正,導致腳本中止。如果查詢成功,它將返回一個非錯誤值(語句句柄),並且or由於布爾短路不會啓動。

+0

的完整描述。親愛的Marc,謝謝。我的錯! – user1508429