请教,Echo $a++ 返回6 执行顺序的背后,有没有一个自然物理过程
php吧
全部回复
仅看楼主
level 8
$a=6
Echo $a++ // 6
按照教科书上的解释,a++ 表示两个过程:①返回当前值 a=6, ②执行自增运算$a+1.
(我的理解第三步$a=$a+1, 即把$a自增1后的最终运算结果值付给变量$a,并不包含在$a++ 中)。
我的疑问是,当:echo $a++的时候,为什么只返回a的初始值,而没有返回$a+1的最终运算结果呢?
我的猜测是,$a++表示两个运算过程:返回当前值,自增1。第二步自增1只是运算,其运算结果 保存在内存里,并没有访问变量名为$a的物理存储单元,并更新$a保存的数值,即没有$a=$a+1这个赋值过程。
所以,当你echo $a++时,只返回6.
当你echo $a 是,程序会访问变量$a ,同时会把$a+1的最终运算结果赋给$a,并返回更新后的值,
以上是我的猜测,不知道正确与否。
请教了好多前辈,他们说,echo $a++ , 只是一个执行的逻辑先后顺序问题,类似于优先级,执行:echo $a++时,先返回使用$a的初始值,再自增。按照各位前辈的说法,echo $a++的运算过程只是设计php这门语言的人工程师的一种强制的硬性规定。那么,我的疑问又来了,这一个强制的逻辑执行顺序的约定背后,有没有一个自然的物理过程呢?还就只是对$a++执行顺序的一种规定呢?
2022年11月15日 09点11分 1
level 6
我($a)先告诉你(echo)盒子里有6个东西($a的值),然后我再往盒子里放一个东西(++运算符),下次你再问我的时候(下一次使用这个变量的时候),我会告诉你盒子里有7个东西($a=7)。
如果你想让我($a)【立刻】让我往盒子里放一个东西,并告诉你盒子里有多少个东西,那你需要直接写出来echo $a = $a + 1。(echo)
2022年11月16日 01点11分 2
抱歉,回复晚了,感谢周老师的回复和帮助。
2022年11月23日 08点11分
这个问题,记得,在我上大学的时候,就没整明白。老师讲的时候,坐在凳子上,一脸的懵逼。 前几天,又折磨了我一天。
2022年11月23日 08点11分
不过,在你们的帮助下,再结合我自己的折腾,对这个问题的理解,好像渐渐明朗了,
2022年11月23日 08点11分
level 6
<?php //php 7.0.8
$a=6;
echo $a++; // 6
echo $a; // 7
$b = 6;
echo $b = $b + 1; // 7
echo $b; // 7
$c = 6;
$c = $c + 1;
echo $c; // 7
?>
2022年11月16日 01点11分 3
周老师,您的意思是说, 已知: $a=6, Echo $a++, ------------------------------------------------------- $a++ 表示这次先返回6,等下次再执行 a+1. 也就是说,自增1(即a+1)只是这次对下一次的请求,并没有真正执行a+1这一步。这次只是返回6,下次再执行a+1.
2022年11月23日 08点11分
2022年11月23日 08点11分
@磁选机除铁_强磁定制 如果你想实现你心目中的自增(前自增),那就多一条$a = $a + 1;再echo $a;
2022年11月23日 09点11分
level 6
你在另一个贴吧发的帖子也回答了你的问题
2022年11月16日 01点11分 4
level 12
先自增 跟 后自增有那么难理解?
2022年11月16日 01点11分 6
他可能过度思考了
2022年11月16日 02点11分
@周存存 可能吧,用现实语言不就是,我先用着,你赶快给我加上,跟你赶快加上,我要用。用计算机执行,就是我先执行现在的,下一次你得加一,你快加上我也要执行,内存地址是,这个地址我先取走了,你等下把地址换了,你把地址给我,我要现在要取。
2022年11月16日 02点11分
@晚归家i🎄 他还提出了一个“物理存储单元”的概念…一头雾水.png
2022年11月16日 02点11分
@晚归家i🎄 他觉得“我先用着,你赶快给我加上” 的结果是7,因为“你赶快给我加上”的结果是7,所以“我要用”的时候应该给我7(而不是6)(把后自增的步骤拆开,然后重新组合成了前自增)
2022年11月16日 02点11分
1