nny*_*thm 8 php grammar interpreter operator-precedence
php手册声称:
$a = 1;
echo ++$a + $a++;
Run Code Online (Sandbox Code Playgroud)
在它的语法下是模棱两可的,但对我来说似乎非常清楚.++ $ a和$ a ++首先从左到右计算,所以++ $ a递增然后返回2,$ a ++返回2然后递增.2 + 2的总和是4,所以它会回显4.然而,PHP手册非常清楚地说明它可以打印4或5.
php规范没有指定操作将从左到右执行吗?
即使它没有强制执行操作将从左到右执行,在这种情况下,它不会返回4无论如何?
编辑:我重读了页面,并声明它由每个特定的操作员确定.+具有最低优先级,并且从左到右进行评估,因此看起来我之前的假设是正确的.我还是不明白.
++$a
让$a
2,然后返回2,
再$a++
增加$a
,$a
现在是3,但它返回2.
在相同的PHP版本中,结果始终相同.但如果PHP版本发生变化,可能会产生不同的结果.它取决于++$a
和$a++
,首先评估哪一个.如果$a++
先评估,结果将为5,否则结果为4.
我认为这个结果背后的想法是,当存在单个运算符时,所有加数都没有优先级,并且在操作中,变量被保留为引用,而不是在所有计算过程中被其结果替换,直到最后一个(加上,在此示例中)。所以当它来自 lr 时:
$a = 1;
++$a + $a++
operand 1 --> ++$a ==> $a = ++1 = 2
result (where $a = 2) --> 2 + (2++) = 4
Run Code Online (Sandbox Code Playgroud)
否则:
$a = 1;
++$a + $a++
operand 2 --> $a++ ==> $a = 1
// new operation on the left side
// so the value gets incremented ==> $a = 2
result (where $a = 2) --> (++2) + 2 = 5
Run Code Online (Sandbox Code Playgroud)
不过我对此并不确定。