php – echo $a $a的输出应该是什么

参见英文答案 > Why is $a + ++$a == 2?13个
在PHP手册 operator precedence section中,有这个例子:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5

我理解行为是未定义的,原因如下:

由于x y = y x,解释器可以自由地评估x和y以便以任何顺序添加以便优化速度和/或存储器.看完C code example in this article后我得出结论.

我的问题是,无论表达式和子表达式的评估方式如何,上述PHP代码的输出应为4:

> op1 = $a => $a = 2,op1 = 2; op2 = $a => op2 = 2,$a = 3; 2 2 = 4
> op1 = $a => op1 = 1,$a = 2; op2 = $a => op2 = 3,$a = 3; 1 3 = 4

5来自哪里?或者我应该更多地了解操作符的运作方式?

编辑:

我一直盯着Incrementing/Decrementing Operators部分,但仍然无法弄清楚为什么5.

++$a: Pre-increment — Increments $a by one,then returns $a.
$a++: Post-increment — Returns $a,then increments $a by one.

a = 1;
++ (preincrement) gives a = 2 (higher precedence than +,and LR higher precedence than postincrement)
++ (postincrement) gives a = 3 (higher precedence than +)
+ (add) gives 2 + 3 = 5

$a最初设置为1. $a然后在公式中使用它之前预先增加$a,将其设置为2,并将该值推送到词法分析器堆栈.然后执行$,因为incrementor的优先级高于,并且该值也被推送到词法分析器堆栈;然后进行的添加将词法分析器堆栈的2结果添加到词法分析器堆栈3的结果,得到5的结果,然后回显.一旦执行该行,$a的值为3.

要么

a = 1;
++ (preincrement) gives a = 2 (higher precedence than +,and LR higher precedence than postincrement)
+ (add) gives 2 + 2 = 4 (the value that is echoed)
++ (postincrement) gives a = 3 (incremented __after__ the variable is echoed)

$a最初设置为1.当公式解析时,$a preincrements $a,在公式中使用它之前将其设置为2(将结果推送到词法分析器堆栈).然后将词法分析器堆栈的结果和$a的当前值相加,得到4;并且这个值得到了回应.最后,$a是后增量的,在$a中留下3的值.

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...