根据操作码它应该是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,堆栈= [5])
>将$x添加到堆栈上(stack = [5,6],所以5 6 – > $x = 11)
>添加已完成,结果为11
>增量$x()(不再使用,但$x现在为7)
实际上,在这个具体的例子中,如果你要回显$x;
它会输出7.你永远不会将值重新分配给$x,所以$x = 7(你增加了两次);