0

私のコードでは、次の比較があります。

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

次の場合でも true になります。

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

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

「AND」の代わりに「&&」演算子を使用しても問題ありませんが、PHP 演算子の優先順位により、括弧が原因でこのエラーが発生することはありません。


「Mar* B*」の両方に迅速に回答していただきありがとうございます。次のようにコードを変更しました。

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

...そしてそれは大丈夫です!

4

2 に答える 2

1

相当する

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

AND は代入 (=) よりも優先順位が低いため

于 2013-07-18T16:10:21.473 に答える
1

ドキュメントで直接指定されています:http://php.net/manual/en/language.operators.precedence.php

andよりも低い優先順位でorバインドする=ため、 を使用したステートメント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 に割り当てられます。その代入の結果も false でありor、die cal で編集され、スクリプトが中止されます。クエリが成功した場合、false 以外の値 (ステートメント ハンドル) が返さorれ、ブール値の短絡のために never が開始されます。

于 2013-07-18T16:10:45.443 に答える