关于PHP传值与传引用的奇怪问题

caofei277 2012-09-22 02:04:54

$a = 1;
$b = &$a;
$b = $a++;
echo $b."<br />";
echo $a;

谁能告诉我 最后得到的$a和$b结果是什么,为什么是这个结果?
...全文
158 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2012-09-22
  • 打赏
  • 举报
回复
我觉得奇怪的是:为什么总是要自己消化 BUG
这个问题已经有好多年历史了,但从来没有人报告此bug
分析具体原因需要看源码,但是在是太难定位了

按语法说明 $a++ 与 $a = $a + 1 等价
就是说
$b = $a++;
等价于
$b = $a;
$a = $a + 1;

如果没有前面的引用
$b = &$a;
echo $a;
是可以得到正确的结果 2 的

由于有了引用,规则就发生了变化。这显然是不对的!
这是在 php 实现引用时的一个 bug
当然他也可能意识到问题的存在,但无法解决

总之由于这个 bug 的存在,你就尽量不要显式的使用引用

acabin 2012-09-22
  • 打赏
  • 举报
回复
输出zend编译结果你就知道是怎么回事了
caofei277 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
$b = &$a; // $a 与 $b 指向相同的地址

对比以下情况就清晰了:
$a = 1;
$b = &$a;
$b = ++$a;
echo $b."<br />";
echo $a;
[/Quote]

麻烦详细说下运行过程,这个我也知道啊,先执行++$a,然后$a变成了2,然后给$b赋值,这时都变成了2,这个可以理解,但是我提的那个就无法理解啊
caofei277 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
测试了一下,最后a,b都等于1,我想这样可以解释结果:
$b = &$a; 执行这句后,因为是引用赋值,a和b都指向同一个值,就是说a,b两个变量
是相互关联的,改变a的值b的值也会随之改变,反之亦然。
$b = $a++;这一句的执行顺序比较关键,我的理解是这样,因为是$a++,所以会先取值,然后再++,
也就是说,先取出a的值1(另外保存),然后立即对a执行++操作,此时a的值……
[/Quote]


说的有一定的道理,不过这样看来就是取出a的值以后,并没有马上赋值给b,而是先执行了a++,然后才将刚才取的值赋值给b,但是以前的印象一直是后缀++应该是所有运算结束后才进行的,很晕啊,有没有权威的解释?
一起混吧 2012-09-22
  • 打赏
  • 举报
回复
$b = &$a; // $a 与 $b 指向相同的地址

对比以下情况就清晰了:
$a = 1;
$b = &$a;
$b = ++$a;
echo $b."<br />";
echo $a;
kankan231 2012-09-22
  • 打赏
  • 举报
回复
测试了一下,最后a,b都等于1,我想这样可以解释结果:
$b = &$a; 执行这句后,因为是引用赋值,a和b都指向同一个值,就是说a,b两个变量
是相互关联的,改变a的值b的值也会随之改变,反之亦然。
$b = $a++;这一句的执行顺序比较关键,我的理解是这样,因为是$a++,所以会先取值,然后再++,
也就是说,先取出a的值1(另外保存),然后立即对a执行++操作,此时a的值变成了2,b的值夜随之变成了2,
然后把之前从a中取出的那个值1赋给变量b,此时b就变成了1,同理a夜变成了1,
所以最后a,b都是1.

你也试一下把++操作放在a的前面分析一下,那样就要先对a执行加1再把值赋给b了

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧