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
,但表达式结果是。看,啊,我理解错了!是的,这是有道理的。非常感谢。