Php 或者随着回报而改变偏好

Php 或者随着回报而改变偏好,php,operator-precedence,comparison-operators,Php,Operator Precedence,Comparison Operators,从我所看到的两个例子中,运算符优先级是有意义的: $a = false; $b = true; $c = $a || $b; 这里$c是真的 $a = false; $b = true; $c = $a or $b; 此处$c为假 $a = false; $b = true; $c = $a or $b; 我理解背后的原因。然而,以下方面: $a = false; $b = true; return $a or $b; 返回true,这让我很困惑 原因是什么?或的优先级低于=,因此:

从我所看到的两个例子中,运算符优先级是有意义的:

$a = false;
$b = true;
$c = $a || $b;
这里$c是真的

$a = false;
$b = true;
$c = $a or $b;
此处$c为假

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

我理解背后的原因。然而,以下方面:

$a = false;
$b = true;
return $a or $b;
返回true,这让我很困惑


原因是什么?

的优先级低于
=
,因此:

$c = $a or $b;
变成这样:

($c = $a) or $b;
但这毫无意义:

(return $a) or $b;
所以你得到这个:

return ($a or $b);

在表达式中,运算符优先级适用
=
|
都是运算符,
$c=$a或$b
是表达式。根据运算符优先级,它的计算结果为
($c=$a)或$b

但是,
return
是一条语句<代码>返回
不是运算符,也不按运算符优先级分组。它的计算结果总是
return
,因此总是
return($a或$b)

表达式
$c=$a或$b
的结果是
true
BTW.
$c
在表达式过程中被赋值
false
,但表达式整体返回值
true
$b
)。因此,即使这个
也会返回true

return $c = $a or $b;

但这仍然不是问题的答案,对吗?为什么它返回
$b
它不返回
$b
,它返回
($a或$b)
false或true
true
@Gobbin,因为
$a
false
…!?如果您知道
return
不是操作员,那么这就是答案@德克塞在他的回答中解释得很好。想想执行的顺序。如果您计算
(返回$a)或$b
,那么您将
首先返回$a
,然后。。。您如何处理
或$b
部件?你不能用它做任何事,因为你已经回来了。也就是说,它没有意义。我同意它没有意义,但我正在寻找一个技术解释,“PHP做a而不是做B,因为B没有意义”不是技术解释。这在@Qirel中有记录。它在哪里提到运算符优先级不适用于返回语句?运算符优先级仅适用于运算符<代码>返回
不是操作员。如果该页面明确列出了运算符优先级不适用的所有内容,那么它将有几百页长。谢谢您的回答。这是有道理的。但是表达式$c=$a或$b的结果不是真的。return$c=$a或$b确实返回true,但我认为这是因为php将其转换为return($c=$a)或$b;整个表达式
$c=$a或$b
的结果为
true
。当然,
$c
最终不是
true
,但表达式结果是。看,啊,我理解错了!是的,这是有道理的。非常感谢。