$a = 1;
$a OR $a = 'somthing'
echo $a; //1
为什么呢?如果=
优先于'OR',那么为什么OR先执行?
答案 0 :(得分:2)
当你在两个语句之间放置OR时,如果第一个语句返回true,则第二个语句永远不会被执行。
在这种情况下,第一个语句($a
)返回true(因为$a = 1
),所以
第二个($ a = 'somthing';
)不会被执行。
答案 1 :(得分:1)
因为1
是真实的。
您对$a OR $a = 'somthing';
的评价
是
a是真的 OR 将其设置为“somthing”
。 嗯,a是真的,所以它不会被设置,而下面的代码会这样做。
$a = false;
$a OR $a = 'somthing';
echo $a; //"something"
答案 2 :(得分:1)
因为如果OR具有更高的优先级,那么
$a OR $a = 'somthing'
将被解析为:
($a OR $a) = 'somthing'
这在技术上是错误的,因为你不能分配给表达式(而程序员想写这样的表达式是编码所以它应该是一个有效的表达式)。
因为or
运算符的优先级较低,因此表达式$a OR $a = 'somthing'
表示为$a OR ($a = 'somthing')
并且根据短路第一个操作数$a
被评估为{{1}第二个操作数表达式未被评估,true
仍为a
。
记住优先规则派生语法规则,从而告诉表达式将如何解析。但优先级是一个编译时属性,它告诉我们表达式是如何构造的。评估是一种运行时行为,它告诉我们如何计算表达式(因此表达式的计算结果不能完全由优先级确定)。 PHP文档似乎也这么说:
Operator Precedence
运算符优先级和关联性仅确定表达式的方式 如果已分组,则不会指定评估顺序。 PHP没有 (在一般情况下)指定表达式的顺序 评估和代码应该采用特定的评估顺序 要避免,因为行为可以在PHP或版本之间发生变化 取决于周围的代码。