您好,欢迎访问一九零五行业门户网

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

本文通过vld工具分析php的opcode,来解释原因,先贴图
t1.php代码  
<?php
$i = 1;
$i+$i++;
vld代码
number of ops: 5
compiled vars: !0 = $i
line # * op fetch ext return operands
---------------------------------------------------------------------------------
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,
t2.php代码  
$i = 1;  
$i+$i+$i++
vld2代码  
number of ops:  6  
compiled vars:  !0 = $i  
line     # *  op                           fetch          ext  return  operands  
---------------------------------------------------------------------------------  
   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;
其它类似信息

推荐信息