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

标签 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,

编辑

还有($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/

相关文章:

PHP while循环,返回偶数/奇数行

php - CakePHP 没有为 hasOne 关系拉动超过一定数量的行

ethereum - Solidity - 松露 : Error: VM Exception while processing transaction: invalid opcode NOT because of revert

assembly - MIPS堆栈帧(和 "addiu"指令混淆)

php - 浏览另一台服务器 PHP 文件夹中的文件

php - WooCommerce - 新的运输方式 - 如何查询单个产品重量

PHP文本截断限制字符

emulation - 对于 6502 Cpu,当 X 和 Y 为 0 时递减(DEX/DEY 操作码)

c - 如何修复 : OP-code isn't read out correctly

C 字符串文字不在机器代码中?