ホームページ >バックエンド開発 >PHPチュートリアル >phpの奇妙な解析方法
代码一:
$i = 1;
$i = $i++ + ++$i;
echo $i;
代码二:
$i = 1;
$i = ++$i + $i++;
echo $i;
这两段代码结果都是4
小弟想不明白 php的 解析原理 求大哥指点
有什么不对吗?
$i = 1;
$i = $i++ + ++$i;
==>
$i = 1(但由于$i++,所以$i为2) + 3(++$i $i为2,加1后为3)
$i = 1;
$i = ++$i + $i++;
==>
$i = 2 + 2
有什么不对吗?
$i = 1;
$i = $i++ + ++$i;
==>
$i = 1(但由于$i++,所以$i为2) + 3(++$i $i为2,加1后为3)
$i = 1;
$i = ++$i + $i++;
==>
$i = 2 + 2
先做++$i
再做加法 应该是 2+2
最后 $i++
应该是 5 呀
$i = 1;
$i = $i++;
echo $i;
echo $i;
输出 两个1
++操作 被吞掉了
貌似 返回 4的理由 就是 最后的 $i++ 在 $i= 的时候 被吞掉了。。。。。。
貌似 返回 4的理由 就是 最后的 $i++ 在 $i= 的时候 被吞掉了。。。。。。
你的理解和我不一样
我是这么分析的
$i = $i++
首先你要承认这是一个赋值操作,将右面的值赋给左面(即$i)
先看右边,当前i的值是1,而i++本身的值也是1,但是i++操作之后i的值就是2了。
重点是最后,要进行复制。上面说到i++本身是1,将1复制给i,这时候i就从2变成了1.
没有吞掉一说。
对!你理解的是正确的!
$i = 1;$ii = ++$i + $i++;echo "\$i=$i \$ii=$ii";//$i=3 $ii=4$i = 1;$ii = $i++;echo '$i='.$i; //$i=2echo '$ii='.$ii; //$ii=1
貌似 返回 4的理由 就是 最后的 $i++ 在 $i= 的时候 被吞掉了。。。。。。
你的理解和我不一样
我是这么分析的
$i = $i++
首先你要承认这是一个赋值操作,将右面的值赋给左面(即$i)
先看右边,当前i的值是1,而i++本身的值也是1,但是i++操作之后i的值就是2了。
重点是最后,要进行复制。上面说到i++本身是1,将1复制给i,这时候i就从2变成了1.
没有吞掉一说。
先赋值 后 ++吧
$i = $i++;
貌似被这样解析了
$i = funcation(){return $i++;}
++操作 被当做了 局部 变量
基础没打好。好好研究下前加与后加的区别。
这样讲,把++当做一个函数,++a返回的是a+1,而a++返回的是a。但两个运算后的a都是a+1,知不是返回值不同。
这样讲,把++当做一个函数,++a返回的是a+1,而a++返回的是a。但两个运算后的a都是a+1,知不是返回值不同。
无论先后 也是 在 $i上 ++
结果应该是 $i=2
$j=$i++;
$i=$i++;
对于 结果$i 不一样
$i = $i++ 这个是未定义行为 (Undefined behavior) 参见http://stackoverflow.com/questions/1998903/php-i-i-crashed-the-server
貌似 返回 4的理由 就是 最后的 $i++ 在 $i= 的时候 被吞掉了。。。。。。
不是的,你要明白一个是先执行后运算的,一个是运算后执行,你理解错了$i++和++$i的区别
$i++是先取再加,++$i,这个是先加再取值
$i = $i++ + ++$i;
这个得到的应该是
$i = 1(先取再加,所以这里还是1) + 3(由于之前$i++得到了2,这里先加再取,所以是3);
最初のものは 2+2 です
2 つ目は 1+3 です
したがって、両方とも 4 に等しいです、
$i++ は $i+1 の式であり、この式の値も $i+1 です、
+ 式 +$i も $i+1 ですが、この式の値は $i+1 ではなく $i です。わかりますか?
これらは 2 つの異なる式です
最初の式は 2+2 です
2 番目の式は 1+3 です
したがって、両方とも 4 に等しいです
$i++ この式は $i+1 です、同時に, この式の値も $i+1 です
++$i この式も $i+1 を変更しますが、この式の値は $i+1 ではなく $i です。
これらは 2 つの異なる表現です
なんと、その逆ですね。 。 。
最初のものは 1+3 です
2 つ目は 2+2 です
したがって、両方とも 4 に等しいです、
++$i この式は $i+1 であり、この式の値も $i+ です1 ,
$i++ この式は $i+1 も変更しますが、この式の値は $i+1 ではなく $i です。わかりますか?
これらは 2 つの異なる表現です
私は長い間習っていませんが、個人的には、$i++ は最初に ++$i(2) に 1 を加算し、最後に 3 に等しくなります。 $i++ は自動的にインクリメントされていません。式全体が実行された後、$i には別の自己インクリメントがあるため、4 になります
おそらく理解できたでしょう
$i = 1
$j = $i++ + ++$i;
echo $i .':'.$j;
$i = 1;
echo $i.':'.$j;
$i = $i++;
$i = $i +1; の代わりに
として解析されます。はい 2+2 1+3 はあってはならない