>백엔드 개발 >PHP 튜토리얼 >php奇怪的解析方式

php奇怪的解析方式

WBOY
WBOY원래의
2016-06-23 14:10:53933검색

代码一:
 $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
第二个是 1+3
所以都是等于4咯,
$i++ 这个表达式是将 $i+1 ,同时这个表达式值也是$i+1,
++$i 这个表达式也是将 $i+1 ,但是这个表达式的值是$i,不是$i+1,懂了吗?

这是两个不同的表达式


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

这是两个不同的表达式

晕,说反了。。。

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

这是两个不同的表达式

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

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

$i = 1;
 $j= ++$i + $i++;
echo $i.':'.$j;

貌似 是 因为 

$i = $i++;

被 解析为 

$i = $i; $i + 1;

而不是

$i = $i; $i = $i +1; 


可能 两种 写法 都是 2+2  应该 不会 有 1+3

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.