代码一:
 $i = 1;
 $i = $i++ + ++$i;
echo $i;代码二:
 $i = 1;
 $i = ++$i + $i++;
echo $i;这两段代码结果都是4小弟想不明白 php的 解析原理 求大哥指点

解决方案 »

  1.   

    有什么不对吗?
    $i = 1;
    $i = $i++ + ++$i;
    ==>
    $i = 1(但由于$i++,所以$i为2) + 3(++$i $i为2,加1后为3)$i = 1;
    $i = ++$i + $i++;
    ==>
    $i = 2 + 2
      

  2.   

    $i = 1;
    $i = $i++;
    echo $i;
    echo $i;输出 两个1++操作 被吞掉了
      

  3.   

    你的理解和我不一样
    我是这么分析的
    $i = $i++
    首先你要承认这是一个赋值操作,将右面的值赋给左面(即$i)先看右边,当前i的值是1,而i++本身的值也是1,但是i++操作之后i的值就是2了。
    重点是最后,要进行复制。上面说到i++本身是1,将1复制给i,这时候i就从2变成了1.
    没有吞掉一说。
      

  4.   

    对!你理解的是正确的!
    $i = 1;
    $ii = ++$i + $i++;
    echo "\$i=$i \$ii=$ii";//$i=3 $ii=4$i = 1;
    $ii = $i++;
    echo '$i='.$i; //$i=2
    echo '$ii='.$ii; //$ii=1
      

  5.   

    你的理解和我不一样
    我是这么分析的
    $i = $i++
    首先你要承认这是一个赋值操作,将右面的值赋给左面(即$i)先看右边,当前i的值是1,而i++本身的值也是1,但是i++操作之后i的值就是2了。
    重点是最后,要进行复制。上面说到i++本身是1,将1复制给i,这时候i就从2变成了1.
    没有吞掉一说。
    先赋值 后 ++吧
      

  6.   

    $i = $i++;貌似被这样解析了
    $i = funcation(){return $i++;}++操作 被当做了 局部 变量
      

  7.   

    这样讲,把++当做一个函数,++a返回的是a+1,而a++返回的是a。但两个运算后的a都是a+1,知不是返回值不同。
      

  8.   


    无论先后 也是 在 $i上 ++结果应该是 $i=2$j=$i++;
    $i=$i++;对于 结果$i 不一样
      

  9.   

    $i = $i++  这个是未定义行为 (Undefined behavior)  参见http://stackoverflow.com/questions/1998903/php-i-i-crashed-the-server
      

  10.   

    $i++是先取再加,++$i,这个是先加再取值
    $i = $i++ + ++$i;
    这个得到的应该是
    $i = 1(先取再加,所以这里还是1) + 3(由于之前$i++得到了2,这里先加再取,所以是3);
      

  11.   

    第一个是 2+2
    第二个是 1+3
    所以都是等于4咯,
    $i++ 这个表达式是将 $i+1 ,同时这个表达式值也是$i+1,
    ++$i 这个表达式也是将 $i+1 ,但是这个表达式的值是$i,不是$i+1,懂了吗?这是两个不同的表达式
      

  12.   

    晕,说反了第一个是 1+3
    第二个是 2+2
    所以都是等于4咯,
    ++$i 这个表达式是将 $i+1 ,同时这个表达式值也是$i+1,
    $i++ 这个表达式也是将 $i+1 ,但是这个表达式的值是$i,不是$i+1,懂了吗?这是两个不同的表达式
      

  13.   

    没学多久,个人觉得应该是这样理解的,$i++先是以1去加++$i(2)最后等于3 ,因为前面的$i++还没有自增,整个表达式运行完了后,$i还有一次自增,所以是4
      

  14.   

    也许这样就你明白了
     $i = 1;
     $j = $i++ + ++$i;
    echo $i.':'.$j;$i = 1;
     $j= ++$i + $i++;
    echo $i.':'.$j;
      

  15.   

    貌似 是 因为 $i = $i++;被 解析为 $i = $i; $i + 1;而不是$i = $i; $i = $i +1; 
    可能 两种 写法 都是 2+2  应该 不会 有 1+3