代码一
$m = 0;
$m = $m++;
echo $m;
输出的值是0。代码二
$m = 0;
$k = $m++;
echo $m;
输出的值是1。为什么两段代码最后$m值不同?请高人详细解释一下。

解决方案 »

  1.   

    例子 名称 效果
    ++$a 前加 $a 的值加一,然后返回 $a。
    $a++ 后加 返回 $a,然后将 $a 的值加一。
    --$a         前减 $a 的值减一, 然后返回 $a。
    $a--         后减 返回 $a,然后将 $a 的值减一。
      

  2.   

    代码一
    $m = 0;
    $m = $m++;
    echo $m;
    输出的值是0。代码二
    $m = 0;
    $k = $m++;
    echo $m;
    输出的值是1。
    第一个输出0  是因为 先赋值在++
    第二个输出1  是因为 你echo的是$m $m在上面自加了    而不是赋值的$K    此时如果输出$k 还是0   
      

  3.   

    $a++    后加    [color=#FF0000]返回 $a,]然后[/color将 $a 的值加一。
      

  4.   

    $a++    后加    返回 $a,]然后将 $a 的值加一。
      

  5.   

    应该两个最后都是1才对,否则就是php的BUG之一!
      

  6.   

    $m = 0;
    xdebug_debug_zval('m');
    $m = $m++;
    xdebug_debug_zval('m');
    echo $m;$m++;
    xdebug_debug_zval('m');
    echo $m;
    m:
    (refcount=1, is_ref=0),int 0
    m:
    (refcount=1, is_ref=0),int 0
    0m:
    (refcount=1, is_ref=0),int 1
    1
      

  7.   

    不要被代码一 的$m 迷惑,你换成其它变量,打印出来的还是0,
    涉及到结构体的知识,$m = 0 ;  $m++是一个结构体, 赋值给一个变量,那个变量又是一个结构体,
    $m++ ,先赋值给那个变量即为0 ,refcount 为指向次数,ref为引用次数,ref=0 不共用一个结构体(参看楼上)
      

  8.   

    你运行一下就知道两个的结果,并且java也是如此。
      

  9.   

    $m = $m++;
    $m++ 是取出 $m 的值,然后 $m 的值加一
    也就是 $m = 0 是最后执行的
      

  10.   

    $m = $m++;
    先赋值,再自增。因为 $m= $m++;  自增的是旧的内存地址。所以新的$m的值是0$k = $m++;
    先赋值,再自增。 $k=0;  自增的是旧的内存地址。所以$m的值是1
      

  11.   

    $m = $m++;后面的 $m++ 可以看成下面这个函数:function a() {
    $a = $m++; // 此步之后$m=1, $a=0
    reurn $a; //此步之后$m又被重新赋值了返回的$a
    }
      

  12.   

    我理解的是,$m+1这个是在$m=$m这个操作之后再去进行,考虑为异步操作,但是重新赋值后就把第二步+1抛弃了,什么原理呢,没想明白呢