gacvd 发表于 2017-4-2 09:17:51

php关于$i++与++$i分析

  本文通过VLD工具分析php的opcode,来解释原因,先贴图

<?php
$i = 1;
$i+$i++;


number of ops:5
compiled vars:!0 = $i
line   # *op                           fetch          extreturnoperands
---------------------------------------------------------------------------------
2   0>   ASSIGN                                                   !0, 1
3   1      POST_INC                                       ~1      !0
2      ADD                                              ~2      !0, ~1
3      FREE                                                   ~2
4   4    > RETURN                                                   1
branch: #0; line:   2-    4; sop:   0; eop:   4
path #1: 0,

$i = 1;
$i+$i+$i++

number of ops:6
compiled vars:!0 = $i
line   # *op                           fetch          extreturnoperands
---------------------------------------------------------------------------------
2   0>   ASSIGN                                                   !0, 1
3   1      ADD                                              ~1      !0, !0
2      POST_INC                                       ~2      !0
3      ADD                                              ~3      ~1, ~2
4      FREE                                                   ~3
4   5    > RETURN                                                   1
branch: #0; line:   2-    4; sop:   0; eop:   5
path #1: 0,
  我们对比2,4这两张图,可以知道为什么结果会让你意外
  先分析1,2的执行结果
  首先$i赋值为1,$i++自增,将本身结果1复制给临时变量~1($i),然后$i自增为2,也就是!0=2,当然最后结果~2 = ~1+!0 ===3;
  再来分析3,4
  首先$i赋值为1,然后$i+$i = !0+!0 == ~1 == 2,接着$i++自增,将本身结果1复制给临时变量~2($i),最后结果~1+~2 == 2+1 ===3;
  eof
页: [1]
查看完整版本: php关于$i++与++$i分析