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 运算符优先级意味着这不应该给出这个错误,因为括号!


感谢您对“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

andor以低于 LOWER 的优先级绑定=,因此您的语句 withand被视为

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

请记住,在 PHP 中,赋值的结果是被赋值的值。这就是标准的“检查数据库故障”代码的工作方式:

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

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

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

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

于 2013-07-18T16:10:45.443 回答