【知识点】php引用变量理解

php的引用变量,就是用不同的名字访问相同变量内容;
注意:
1、引用指向同一个内存空间的变量,当内存中的值发生改变后,所有的变量都将看到改变后的值;
2、unset的时候只会取消引用,不会销毁内存空间;
2、php的类对象本身就是引用传值,将一个实例化的对象赋值给另外一个变量的时候,不需要加&符号;如果需要进行空间复制可以使用clone来实现
4、将一个变量赋值给另外一个变量的时候不会马上开辟一块内存空间,只有当其中一个变量发生修改的时候才会新开辟一块内存空间(COW机制:copy on write)

看看下面这个代码执行后的$data最终结果是什么?
[code]
$date = [‘a’,’b’,’c’];
foreach($data as $k=>$v){
$v = &$data[$k];
}
[/code]
解析:
第一次循环:
1、$k=0;$v=’a';
2、$v与$data[0]建立引用关系;
此时$data的结果是:[‘a’,’b’,’c’]
第二次循环:
1、$k=1;$v=’b';由于$v与上一次循环的$data[0]建立引用关系,无论两个变量哪一个发生变化都会导致另外一个变化,所以$data[0]也变成了b
2、$v与$data[1]建立引用关系;在与$data[1]建立引用关系的同时也解除了$v与$data[0]的引用关系;
此时$data的结果是:[‘b’,’b’,’c’]
第三次循环:
1、$k=2;$v=’c';由于$v与上一次循环的$data[1]建立引用关系,无论两个变量哪一个发生变化都会导致另外一个变化,所以$data[1]也变成了c
2、$v与$data[2]建立引用关系;在与$data[2]建立引用关系的同时也解除了$v与$data[1]的引用关系;
此时$data的结果是:[‘b’,’c’,’c’]