社区
Framework
帖子详情
关于PHP传值与传引用的奇怪问题
caofei277
2012-09-22 02:04:54
$a = 1;
$b = &$a;
$b = $a++;
echo $b."<br />";
echo $a;
谁能告诉我 最后得到的$a和$b结果是什么,为什么是这个结果?
...全文
198
6
打赏
收藏
关于PHP传值与传引用的奇怪问题
$a = 1; $b = &$a; $b = $a++; echo $b.""; echo $a; 谁能告诉我 最后得到的$a和$b结果是什么,为什么是这个结果?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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了
尽量使用“
引用
常量”
传
参,而不是
传
值
默认情况下, C++ 为函数
传
入和
传
出对象是采用
传
值
方式的(这是由 C 语言继承而来的特征)。除非明确使用其他方法,函数的形式参数总会通过复制实在参数的副本来创建,并且,函数的调用者得到的也是函数返回值得一个副本。这些副本是由对象的拷贝构造函数创建的。这使得“
传
值
”成为一项代价十分昂贵的操作。观察下边的示例中类的层次结构: class Person {public: Person
PHP
中的循环描述错误有哪些_
PHP
循环中「
引用
」引发的
奇怪
问题
本文整理自 stackoverflow 网站上的一篇文章 Strange behaviour after loop by reference - Is this a
PHP
bug? ——在
PHP
循环中,如果使用
引用
会引发非常
奇怪
的行为 - 这是
PHP
的一个 bug 吗?
问题
在我写一个简单的
PHP
脚本时,发生了一些非常
奇怪
的现象。下面是我的代码,为了清楚的表达我的意思,我特意去掉了...
php
中foreach的
引用
和
传
值
问题
PHP
官方手册警告:数组最后一个元素的$value
引用
在foreach循环之后仍会保留。建议使用unset()来将其销毁。 // 示例代码 $data = [1,2,3]; foreach($data as &$d){} var_dump($data); //循环完后,最后一个元素$d = &$data[2],指向的是同一个地址 foreach($data as $d){} var_dump($data); // 执行结果 array(3) { [0]=>...
php
foreach
引用
,
php
foreach使用
引用
的陷阱
最近工作中在foreach中使用
引用
的时候出现一个怪现象,使用2次foreach的时候数组值发生了改变,代码示例如下我的预期结果是1,2,3 但是实际结果输出1,2,2
奇怪
了,遍历数组难道还会改变数组的值么,猜测原因肯定出现在&row这个
引用
上。在第2个循环里打印$arrArray([0] => 1[1] => 2[2] => 1)Array([0] => 1[1]...
php
foreach变量
引用
的
问题
php
中foreach地址
引用
使用不当,容易引起莫名其妙的
问题
,建议使用完unset掉,或者尽量不用
Framework
4,250
社区成员
4,522
社区内容
发帖
与我相关
我的任务
Framework
国内外优秀PHP框架讨论学习
复制链接
扫一扫
分享
社区描述
国内外优秀PHP框架讨论学习
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章