$a = [];
$b = &$a;
$a['name'] = ['age' => 12];
$a = &$a['name'];
print_r($b);
$b不是指向了$a么 $a不是又指向了 ['age' => 12]么 那么$b不应该也就是这个值了么 可是为什么
$b = ['name' => ['age] => 12] ??
Help me sos~~~~ (⊙o⊙)
1
dearrrfish 2015-04-02 04:35:09 +08:00 1
$b 指向的 “内存地址” 不会跟 $a的重定义变化而变化。
|
2
msg7086 2015-04-02 07:09:24 +08:00 2
你还是不要这么理解比较好了。
理解成别名吧。 $a = []; $b = &$a; # b从现在开始就是a的别名了,反过来a也是b的别名了 $a['name'] = ['age' => 12]; $a = &$a['name']; # a从现在开始就是a['name']和b['name']的别名,而不再是b的别名了。 换句话说。并不是b指向了a,而是b和a同时指向了第一行的那个[]。 |
3
raincious 2015-04-02 08:04:03 +08:00 2
@msg7086 +1
其实可以更加形象一些。 刚刚建立 $a 这个变量的时候,它的地址是 1。 $b = &$a; 的时候相当于将 1 赋值给了 $b,所以 $b 看起来和 $a 有一样的数据。 同样的, $a = &$a['name']; 是将地址 11 赋值给了 $a,$a 的引用指向改变了,$b 仍然引用的是原来的引用指向。 |
4
zqhong 2015-04-02 08:06:22 +08:00 1
$a = []; // 假设当前$a指向的内存空间地址为:0x0000 0001
$b = &$a; // $b也指向了$a所在的内存空间地址,这个时候$a、$b指向的地址都是 0x0000 0001 $a['name'] = ['age' => 12]; // $a是一个数组嘛,这里$a数组里面一个叫做“name”的元素,也是一个数组,这个数组的内存空间地址为:0x0000 00002 $a = &$a['name']; // 好像阁下是这里不大理解。在执行这条语句的之前,$a的地址:0x0000 0001,$b的地址:0x0000 00001,这句话的意思就是,$a的地址修改为($a['name'])的地址。执行这条语句之后,$a的地址为:0x0000 0002,$b的地址为:0x0000 0001 print_r($b); @.@不是很理解这些东西,希望能给阁下一些帮助。 |
6
mcfog 2015-04-02 09:38:30 +08:00 2
虽然搞懂引用也不坏,但最好的方法还是永远不用,就好像`==`啊`goto`啊之类的东西
语言都是可以裁剪且应当被裁剪的 |
7
mclxly 2015-04-02 09:51:47 +08:00
楼主有空看看c语言的指针,就会明白~
|
8
yuptyy OP @msg7086
$a = []; $b = &$a; $a['name'] = []; $a = &$a['name']; $a['name'] = []; 那如果在最后加上 $a['name'] = []; 此时$a的地址 已经发生变化 但是$b还是指向原来的[] 那么 修改$a 的内容 $b为什么仍然受到了影响呢 |
9
yuptyy OP @raincious
$a = []; $b = &$a; $a['name'] = []; $a = &$a['name']; $a['name'] = []; 那如果在最后加上 $a['name'] = []; 此时$a的地址 已经发生变化 但是$b还是指向原来的[] 那么 修改$a 的内容 $b为什么仍然受到了影响呢 |
10
raincious 2015-04-02 13:03:58 +08:00 1
@yuptyy
$a 和 $b 引用是引用,值是值。是两个独立的变量,互相不会影响,除非直接进行赋值。 $a = []; // 建立一个数组,赋值给 $a $b = &$a; // 将 $a 的引用(引用地址)赋值给 $b $a['name'] = []; // 在 $a 建立一个数组,同时在 $a 中建立一个键名为 name 的项 $a = &$a['name']; // 引用刚才建立的那个项,将值赋值给 $a $a['name'] = []; // 在 $a (现在位于原先的 name 项中) 中建立一个键名为 name 的项。 可见上面并没有更改 $b 的指向,所以他还是指向原先的地方。 如果你目前不太理解这些,建议听从 @mcfog 说的,不要进行复杂的引用操作。等你真正从C学过来了解了指针和引用的思想,自然也就能明白了。 |