操作员 ”?”和运算符 AND 评估
Operator "?" and operator AND evaluation
计算结果为 TRUE。
$A = TRUE;
$B = FALSE;
$result = ($A) AND ($B) ? true : false;
为什么评价是真的,评价到底是怎么一步一步来的?
谢谢
我最初的想法是它是returning true
因为缺少括号。 原因:三元表达式从左到右求值。请参阅 DEMO 如果用括号 ()
包裹它,它将 return 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
与三元无关。这是因为 =
的 precedence 比 and
高。这意味着您要设置 $result = ($A)
然后 and
之后的所有内容都无关紧要。
($B) ? true : false
的计算结果为 false
,但是因为赋值已经发生在表达式的第一部分,所以它没有赋值给任何东西。基本无视。
对于更直接的示例,请尝试
$result = true and false;
$result
将是 true
。
计算结果为 TRUE。
$A = TRUE;
$B = FALSE;
$result = ($A) AND ($B) ? true : false;
为什么评价是真的,评价到底是怎么一步一步来的?
谢谢
我最初的想法是它是returning 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
与三元无关。这是因为 =
的 precedence 比 and
高。这意味着您要设置 $result = ($A)
然后 and
之后的所有内容都无关紧要。
($B) ? true : false
的计算结果为 false
,但是因为赋值已经发生在表达式的第一部分,所以它没有赋值给任何东西。基本无视。
对于更直接的示例,请尝试
$result = true and false;
$result
将是 true
。