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

Emi*_*mil 13 php opcode

根据操作码它应该是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,
Run Code Online (Sandbox Code Playgroud)

编辑

另外($ x ++)+($ x ++); 返回相同的结果(11).实际上,这是问题和操作码调查的主要原因.

Mar*_*ijn 11

它花了我一些读数,但$x=5; $x++ + $x++;工作原理如下:

在$ x ++的情况下,它首先"被使用",然后增加:

  • 将$ x设置为5
  • 将$ x放到堆栈上(这是5)
  • Increment(++)($ x现在是6,stack = [ 5 ])
  • 添加$ X到栈(stack = [5,6 ],所以5 + 6 - > $ X = 11)
  • 添加完成后,结果为11
  • 增量$ x(++)(不再使用,但$ x现在为7)

实际上,在这个具体的例子中,如果你愿意echo $x; 输出7.你永远不会将值重新分配回$ x,所以$ x = 7(你增加了两次);