运算符“?”和运算符AND评估

时间:2018-09-17 16:57:48

标签: php evaluation operator-precedence

计算结果为TRUE。

$A = TRUE;
$B = FALSE;

$result = ($A) AND ($B) ? true : false;

为什么评估是正确的?评估是如何逐步完成的?

谢谢

2 个答案:

答案 0 :(得分:4)

与三元无关。这是因为=的{​​{3}}比and高。这意味着您要设置$result = ($A),然后and之后的所有内容都不相关。

($B) ? true : false 确实计算为false,但是由于赋值已经在表达式的第一部分中发生,因此它没有赋给任何东西。基本上被忽略了。

有关更直接的示例,请尝试

$result = true and false;

$result将是true

答案 1 :(得分:1)

我最初的想法是,由于缺少括号,它正在返回true原因三元表达式从左到右计算。请参见DEMO,如果使用括号bool(false)

进行包装,它将返回()
$A = TRUE;
$B = FALSE;

$result = (($A) AND ($B)) ? true : false;
var_dump($result);

已编辑: 为什么以及如何使用第二个FALSE?

因为and/or的优先级低于=,但是||&&的优先级高于=。例如。

<?php
$bool = true && false;
var_dump($bool); // false, that's expected

$bool = true and false;
var_dump($bool); // true, ouch!
?>  

希望现在很清楚:)。 来源http://php.net/manual/en/language.operators.precedence.php#117390