本帖最后由 yinjie_1984 于 2014-11-15 08:22:22 编辑

解决方案 »

  1.   

    $a=1;
    $b=$a++;结果:
    $b = 1
    $a = 2;如果在中间加 $b = &$a;
    表示$a $b 指向同一个地址
    如果$b改变,$a的值也会变,最终$b = 1,$a = 1
      

  2.   

    $a = 1;
    $b = $a++;
    var_dump($a, $b);
    /*
    int(2)
    int(1)
    */$a = 1;
    $b = &$a;
    $a++;
    var_dump($a, $b);
    /*
    int(2)
    int(2)
    */$a = 1;
    $b = &$a;
    $b = $a++;
    var_dump($a, $b);
    /*
    int(1)
    int(1)
    */对于 $b = $a++;
    将 $a 的值 1 取出赋予 $b,但 ++ 的优先级高于 =,所以取值后先不做赋值,而是做 ++,于是 $a 的值为 2(由于 $b 是 $a 的引用,所以此刻 $b 的值也是 2)
    然后做赋值操作,$b 的值就等于 1 了
    因为 $b 是 $a 的引用,于是 $a 又被改回了 1
      

  3.   

    如果你不知道运算符的优先级 可以这样理解!<?php
    $a=1;
    $b=&$a; //相当于告诉你 a、b指向同一地址!$c=$a++; //先把a的当前值赋给c 之后 a自加1$b=$c;形象点说就是 a b 代表同一抽屉里有几个苹果!   小明负责看一眼a所在的抽屉 把抽屉里有几个苹果记住(即a是多少),然后往抽屉里多放一个苹果!  然后再把b所在的抽屉里的苹果数变成刚刚记住的苹果数,即a的值! 所以变来变去! 又变回a了!
      

  4.   

    第一种情况,没有引用$a=1;
    $b=$a; // 这时 b=1 a=1
    $b=$a++; // a先赋值给b,然后再自增 b=1 a=2echo $a;
    echo $b;
    第二种情况,引用$a=1;
    $b=&$a; // b引用a,就是a,b是指向同一内存地址
    $b=$a++; // a 把值读出后执行自增,a=2 b=2,然后再把值赋值给b,所以b=1 a=1echo $a;
    echo $b;