在php中引用意味着用不同的名字访问同一个变量内容
定义符号 &
工作原理:
不使用引用时:
<?php
$a = range(0, 10); // 开辟为a内存空间
var_dump(memory_get_usage());
$b = $a; // 不会给b开辟内存空间。COW机制,Copy On Write ,只有修改的时候才会开辟空间
var_dump(memory_get_usage());
$a = range(0, 10); // 对a重新开辟空间
var_dump(memory_get_usage());
使用引用时:
<?php
$a = range(0, 10); // 开辟为a内存空间
var_dump(memory_get_usage());
$b = &$a; // 不会给b开辟内存空间。b和a指向同一个空间
var_dump(memory_get_usage());
$a = range(0, 10); // 不在对a重新开辟空间,
var_dump(memory_get_usage());
unset()函数:只会取消引用,不会销毁空间
<?php
$a = 1;
$b = &$a;
unset($b);
echo $a;
在类中,赋值后修改不会进行空间的复制
<?php
// 对象本身就是引用传递
class Persion{
public $name = "zhangli";
}
$p1 = new Persion();
$p2 = $p1;
$p2->name = "lisi"; // 修改后空间没有复制
echo $p1->name; // 输出 lisi