操作员"?"和操作员 AND 评估



计算结果为 TRUE。

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

为什么评价是真实的,评价究竟是如何一步一步地完成的?

谢谢

它与三元无关。这是因为=的优先级高于and。这意味着您正在设置$result = ($A)然后and之后的所有内容都无关紧要。

($B) ? true : false的计算结果确实false,但由于赋值已在表达式的第一部分中发生,因此未分配给任何内容。它基本上被忽略了。

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

$result = true and false;

$result将是true.

我最初的想法是它返回true,因为缺少括号。原因三元表达式从左到右计算。查看演示,如果您用括号包裹它,它会返回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

最新更新