php - &符号引用传递会对运算结果有什么影响?
本文介绍了php - &符号引用传递会对运算结果有什么影响?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
$a = 1;
$b = &$a; //传址。注释掉此行返回5,不注释时(PHP版本<7的)返回6
$c = (++$a) + (++$a);
echo $c;
跟版本有关系吗?还有就是结果是6啊,百思不得其解啊
解决方案
先说一下加上了引用赋值的操作
$b = &$a;
这个操作,可以认为,$a
和$b
都指向原本$a
变量所在的那块内存(为了方便后面解释,称为内存X
),也就是说,后面任何对于$a
或者$b
的操作,都是在直接对这块内存里的值进行修改。
所以加上这一行之后的运行流程:
前面步骤省略,初始a为1
$c = (++$a) + (++$a)
的两次++$a
都是在操作内存X
,也就是把内存X
里的值自增了两次,所以,在运算$c的值的时候,取的是这个内存里数的值,也就是自增了两次之后的内存X
里的值。所以,是3 + 3 = 6
(运算$c
时候,内存X
里存的值是3)。
再说一下注释了引用之后的操作
如果不加引用,那么对于$a
的自增接操作直接修改内存X
,而后通过运算符操作返回内存X的副本
,这样,两次的++$a
结果由于不是直接从内存X
获取的,而是改变内存X
值之后的副本,所以$c
在运算的时候就是2 + 3 = 5
。
这篇关于php - &符号引用传递会对运算结果有什么影响?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文