或者使用 return 更改偏好
OR Preference changing with a return
据我所知,运算符优先级在这两个示例中是有意义的:
$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;
Returns是的,这让我很困惑。
这是什么原因?
or
的优先级低于 =
,因此:
$c = $a or $b;
变成这样:
($c = $a) or $b;
但这没有意义:
(return $a) or $b;
所以你得到这个:
return ($a or $b);
在表达式中,运算符优先级适用。 =
、||
、or
都是运算符,$c = $a or $b
是表达式。根据运算符优先级,它的计算结果为 ($c = $a) or $b
.
然而,return
是一个 语句 。 return
不是运算符,也不按运算符优先级分组。它始终计算为 return <expression>
,因此始终计算为 return ($a or $b)
.
表达式 $c = $a or $b
的结果是 true
顺便说一句。 $c
是在表达式的过程中被赋值 false
,但表达式整体 returns 的值是 true
($b
)。所以即使这样 return true
:
return $c = $a or $b;
据我所知,运算符优先级在这两个示例中是有意义的:
$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;
Returns是的,这让我很困惑。
这是什么原因?
or
的优先级低于 =
,因此:
$c = $a or $b;
变成这样:
($c = $a) or $b;
但这没有意义:
(return $a) or $b;
所以你得到这个:
return ($a or $b);
在表达式中,运算符优先级适用。 =
、||
、or
都是运算符,$c = $a or $b
是表达式。根据运算符优先级,它的计算结果为 ($c = $a) or $b
.
然而,return
是一个 语句 。 return
不是运算符,也不按运算符优先级分组。它始终计算为 return <expression>
,因此始终计算为 return ($a or $b)
.
表达式 $c = $a or $b
的结果是 true
顺便说一句。 $c
是在表达式的过程中被赋值 false
,但表达式整体 returns 的值是 true
($b
)。所以即使这样 return true
:
return $c = $a or $b;