PHP-关于PHP引用传值的不理解

发布于 2017-01-25 22:56:14 字数 224 浏览 1244 评论 3

$arr = array(1,2,3,4,5);

foreach ($arr as $key => $value) {
$value = &$arr[$key];
}

输出结果array(2,3,3);

$a = &$b;
这种引用传值是理解的,但上面的这个就不理解了。
(了解引用是两个变量共同指向到一个内存地址)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

偏爱自由 2017-07-03 08:41:41

$arr = array(1,2,3,4,5);

foreach ($arr as $key => $value) {
$value = &$arr[$key];
}
print_r($arr);

结果如下:
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
[4] => 5
)

瑾兮 2017-05-23 10:07:14

<?php
$arr = [1,2,3];
foreach($arr as $k => $v){
$v = &$arr[$k];
echo '<pre>';print_r($arr);echo '</pre>';
}

# 执行结果
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 2
[1] => 2
[2] => 3
)
Array
(
[0] => 2
[1] => 3
[2] => 3
)

个人见解:
1、当 $k == 0 的时候,
|-- 在foreach的圆括号表达式里 ==> $v被赋值成1
|-- 接着走到大括号里 ==> &$arr[$k]此时的值是1,传递给$v也是1 (这一步很关键,这步决定了$v 完全等于 $arr[0],不论修改谁,都会影响另一个的值)

打印结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
)

2、当 $k == 1 的时候,
|-- 在foreach的圆括号表达式里 ==> $v被赋值成2 (还记得$k == 0的时候我们说的有个关键的一步吗?修改了$v等于修改了$arr[0]啊),所以这步做了两件事,1、$v = $arr[1]; 2、$arr[0] = $v; 结果就是 $arr[0] 等于2、$v 等于 $arr[1]的值 2
|-- 接着走到大括号里 ==> &$arr[$k]此时的值是2,传递给$v也是2
打印结果:
Array
(
[0] => 2
[1] => 2
[2] => 3
)

剩下的以此类推....
有点绕,语言组织不好,看不明白的别见怪!
由此可以推断出foreach 循环体内$v不会被销毁,直到结束了循环,才销毁

甜柠檬 2017-04-13 23:58:40

传递分为值传递和引用传递,值传递是将值进行复制一份传递过去,传递之后,内存里有两个变量,引用传递是传递变量地址,传递之后还是原变量。
至于你的array(2,3,3),我完全不知道你这几行代码怎么就能跑出这个结果,麻烦问问题把问题扯清楚,ok?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文