根据操作码,它应该是 12。我理解错了吗?
number of ops: 8
compiled vars: !0 = $x
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------
3 0 E > EXT_STMT
1 ASSIGN !0, 5
5 2 EXT_STMT
3 POST_INC ~2 !0
4 POST_INC ~3 !0
5 ADD ~4 ~2, ~3
6 ECHO ~4
7 7 > RETURN 1
branch: # 0; line: 3- 7; sop: 0; eop: 7; out1: -2
path #1: 0,
编辑
还有($x++)+($x++);返回相同的结果 (11)。实际上,这是问题和操作码调查的主要原因。
最佳答案
我读了几遍,但是 $x=5; $x++ + $x++;
是这样工作的:
在 $x++ 的情况下,它首先“被使用”,然后增加:
- 将$x设为5
- 将$x入栈(即5)
- 增量(
++
) ($x 现在是 6, stack=[5]) - 将 $x 加入堆栈 (stack=[5,6], 所以 5+6 -> $x=11)
- 加法完成,结果为11
- 增加 $x(
++
)(没有进一步使用,但 $x 现在是 7)
实际上,在这个具体的例子中,如果你要 echo $x;
它会输出 7。您永远不会将该值重新分配回 $x,因此 $x=7(您将它递增了两次);
关于php - 为什么 $x=5; $x+++$x++;在 PHP 中等于 11?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51059316/