QQ 1640076782

2014年01月24日

PHP 值传递和引用传递

Filed under: phper — 标签:, — liphp @ 9:50 上午

最近修改客户反馈的问题的时候遇到了PHP比较难懂的值传递和引用传递、看这两种的传递方式可以理解为 值传递其实传递的是变量的值、引用传递传递的变量的地址.直说这个肯定会感觉很迷糊 这个是个什么意思呢.

比如 变量a=5  那么 a就会开辟出一块区域区并且a他会有一串的地址(比如说是 [123abc])、地址肯定要对于一个空间 那么5会被储存在这个空间里面。其实我们在打印a的时候 是先在栈区中找到储存的a 的地址也就是[123abc] 然后找到a的地址对应的值,也就是5。

代码说明 :
1.值传递
function test($b){
$b=$b+1;
}
$a=5;
test($a);
echo $a;

结果会输出5

程序执行过程:

第一步 : a=5首先被执行按照上面讲的会被分到一个区域 $a 假如对应的地址为 [123aaxx] 空间储存的值为5。

第二步 : 调用函数 test($a) 此时的调用函数他会开辟出一个新的区域出来 $b 假如对应的地址为[123bbxx] 他的储存值就会为6 .这个时候返回 因为是输入的$a 所以打印$a这个时候的$a 他会找到他对于的区域地址[123aaxx] 结果就会输入5

2.引用传递 (地址传递)

使用地址传递的时候只需要要在前面添加一个地址符合就可以了 ” & ”

代码说明:
function test(&$b){
$b=$b+1;
}
$a=5;
test($a);
echo $a;

结果会输出6

第一步 : a=5首先被执行按照上面讲的会被分到一个区域 $a 假如对应的地址为 [123aaxx] 空间储存的值为5。

第二步 : 调用函数 test($a) 此时的调用函数他也会开辟出一个新的区域出来 $b 这个地方就要注意了 因为他传递的是地址 所以这个地方的地址不是随机生成出来的 而且传递过来的地址也就是$a的地址[123aaxx]  .新区域储存是这样的 $b 地址[123aaxx] 空间值是6 当他返回$a的时候根据地址找到$a 里面储存的值5 然后5 就会被更改为6.结果打印$a的时候就会输出6.

如果你有外贸企业网站建站需求,欢迎随时联系我们

QQ客服:415682727

电话:020-39907297 

MSN:[email protected]