社区
Framework
帖子详情
关于PHP传值与传引用的奇怪问题
caofei277
2012-09-22 02:04:54
$a = 1;
$b = &$a;
$b = $a++;
echo $b."<br />";
echo $a;
谁能告诉我 最后得到的$a和$b结果是什么,为什么是这个结果?
...全文
162
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了
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]=>...
python值类型和
引用
类型的区别_探索 Python 之 变量、类型和
引用
在探索到 Python 函数的参数
传
递的时候,我不禁赞叹 Python 灵活的参数设计,但慢慢的,开始迷惑与
传
递参数的修改和返回。众所周知,在 C++ 中
传
递参数分为
传
值
和
传
引用
两种,但 Python 没有,那到底
传
进去的东西,修改一下,能不能
传
出来呢?这是一个很
奇怪
和让人费解的
问题
,不是么?在查阅了一些资料后,对 Python 关于变量、类型和
引用
的一些基本方式有了一些了解,进而基于这种理解并结...
php
use
传
值
,use关键字在
PHP
中的几种用法
在学习了和使用了这么多年的
PHP
之后,您知道use这个关键字在
PHP
中都有哪些用法吗?今天我们就来看一下它的三种常见用法。1. 用于命名空间的别名
引用
//命名空间include'namespace/file1.
php
';useFILE1\objectA;useFILE1\objectAasobjectB;echoFILE1\CONST_A,
PHP
_EOL;//2$oA=ne...
foreach
php
,foreach遍历过程中的
奇怪
现象(
PHP
5)
PHP
中基础中的三大坑,foreach遍历,
引用
机制&,数组。今天我们在讲讲foreach中的一些
奇怪
现象。在讲解之前,可以先看看我其他相关的文章,属于同一个大的知识点,都看看有助于理解。△△△写前声明:以下结论都基于
PHP
5版本,因为时代在进步,在
PHP
7中内部的结构体模块和
引用
模块均发生重大变化,
PHP
7的foreach输出规则也旋即发生变化。当然,由于
PHP
7想要普及还需要一到两年(...
探索 Python 之 变量、类型和
引用
在探索到 Python 函数的参数
传
递的时候,我不禁赞叹 Python 灵活的参数设计,但慢慢的,开始迷惑与
传
递参数的修改和返回。 众所周知,在 C++ 中
传
递参数分为
传
值
和
传
引用
两种,但 Python 没有,那到底
传
进去的东西,修改一下,能不能
传
出来呢?这是一个很
奇怪
和让人费解的
问题
,不是...
Framework
4,250
社区成员
4,522
社区内容
发帖
与我相关
我的任务
Framework
国内外优秀PHP框架讨论学习
复制链接
扫一扫
分享
社区描述
国内外优秀PHP框架讨论学习
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章