PHP中的运算符优先级错误(AND比较)

时间:2013-07-18 16:06:06

标签: php operator-precedence

在我的代码中,我有这个比较:

$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

如果我使用“&amp;&amp;”操作符就可以了而不是“AND”,PHP运算符优先级意味着这不应该出现此错误,因为括号!


感谢您对“Mar * B *”的快速回答。我更改了代码如下:

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

......没关系!

2 个答案:

答案 0 :(得分:1)

相当于

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

因为AND的优先级低于赋值(=)

答案 1 :(得分:1)

它直接在文档中指定:http://php.net/manual/en/language.operators.precedence.php

andor绑定的优先级低于=,因此您对and的声明被视为

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

请记住,在PHP中,赋值的结果是赋值。这是标准的“检查db failure”代码的工作原理:

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

因为or绑定低于=,语句解析为:

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

如果数据库查询失败,则返回false,将其分配给$ result。该赋值的结果也是错误的,它与die cal一起or,导致脚本中止。如果查询SUCCEEDS它返回一个非假值(语句句柄),并且由于布尔短路,or永远不会启动。