或偏好随着回报而改变

时间:2018-07-25 13:41:38

标签: php operator-precedence comparison-operators

从这两个示例中,我认为运算符优先级是有意义的:

$a = false;
$b = true;
$c = $a || $b;

此处$ c是 true

$a = false;
$b = true;
$c = $a or $b;

此处$ c为 false


我了解其背后的原因。但是,以下内容:

$a = false;
$b = true;
return $a or $b;

返回true,这使我感到困惑。

这是什么原因?

2 个答案:

答案 0 :(得分:4)

or的优先级低于=,因此:

$c = $a or $b;

成为这个:

($c = $a) or $b;

但这没有意义:

(return $a) or $b;

所以您得到了:

return ($a or $b);

答案 1 :(得分:3)

在表达式中,运算符优先级适用。 =||or都是运算符,$c = $a or $b是一个表达式。并且根据运算符优先级,其结果为($c = $a) or $b

但是,return声明return不是运算符,也不按运算符优先级分组。它的总值为return <expression>,因此始终为return ($a or $b)

表达式 $c = $a or $b的结果为true BTW。在表达式的过程中,$c被分配了false,但是表达式整体返回值true$b)。因此,即使这样return true

return $c = $a or $b;