为什么$x = 5; $x $x;在PHP中等于11?

根据操作码它应该是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(你增加了两次);

上一篇:PHP开发中使用的工具


下一篇:ASM:输出Java字节码和操作码