【概念】

在PHP中使用不同的变量名称,访问同一个内容。

【定义方式】

&

【demo】

//创建一个包含0-10的数组
$a = range(0,10);//创建内存空间

var_dump(memory_get_usage());//查看内存使用情况

// COW Copy On Write
$b = $a; //$b指向$a 空间
$a = range(0,2);//修改a,开辟新空间


$b &= $a; //引用,2个变量永远指向一个空间。更改a内容,并不会开辟新空间

【zval变量容器】

$a = range(0,3);
xdebug_debug_zval('a');//需要安装Xdebug

当变量发生引用时,unset 只会取消引用,并不会销毁空间。

对于对象 obj 来说,本身就是引用传递,不会开辟新空间。

class Person
{
public $name = "zhangsan";
}

$p1 = new Person();
xdebug_debug_zval('p1');

$p2 = $p1;

$p2->name = "lisi";

【题目练习】

<?php 

$data = ['a','b','c'];

foreach($data as $key => $val)
{
$val = &$data[$key];
}

// 1、程序运行时,每一次循环结束后,变量$data的值是什么,请解释。
// 2、程序执行完成后,变量 $data 的值是什么?请解释。

?>

abc->bbc->bcc->bcc