PHP中的优先运算符'OR'和'='

时间:2014-02-06 07:37:46

标签: php assignment-operator operator-precedence

$a = 1;
$a OR $a = 'somthing'
echo $a; //1

为什么呢?如果=优先于'OR',那么为什么OR先执行?

3 个答案:

答案 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或版本之间发生变化   取决于周围的代码。