简单了解 PHP 引用如何工作
<?php
/* 想象这是内存映射
______________________________
|指针 | 值 | 变量 |
-----------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | NULL | --- |
| 4 | NULL | --- |
| 5 | NULL | --- |
------------------------------------
创建一些变量 */
$a=10;
$b=20;
$c=array ('one'=>array (1, 2, 3));
/* 查看内存
_______________________________
|指针 | 值 | 变量的 |
-----------------------------------
| 1 | 10 | $a |
| 2 | 20 | $b |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] |
------------------------------------
执行 */
$a=&$c['one'][2];
/* 查看内存
_______________________________
|指针 | 值 | 变量的 |
-----------------------------------
| 1 | NULL | --- | //$a 的值被销毁,指针被释放
| 2 | 20 | $b |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] ,$a | // $a 现在在这里
------------------------------------
执行 */
$b=&$a; // 或 $b=&$c['one'][2]; 结果与 "$c['one'][2]" 和 "$a" 在同一指针处相同。
/* 查看内存
_________________________________
|指针 | 值 | 变量的 |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- | //$b 的值被销毁,指针被释放
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 |$c['one'][2] ,$a , $b | // $b 现在在这里
---------------------------------------
接下来执行 */
unset($c['one'][2]);
/* 查看内存
_________________________________
|指针 | 值 | 变量的 |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $a , $b | // $c['one'][2] 被销毁,不在内存中,也不在数组中
---------------------------------------
接下来执行 */
$c['one'][2]=500; //现在它在数组中
/* 查看内存
_________________________________
|指针 | 值 | 变量的 |
--------------------------------------
| 1 | 500 | $c['one'][2] | //创建后,它位于内存中的任何(下一个)空闲指针上
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $a , $b | //此指针正在使用
---------------------------------------
让我们尝试在旧指针处返回 $c['one'][2] 并删除引用 $a,$b。 */
$c['one'][2]=&$a;
unset($a);
unset($b);
/* 查看内存
_________________________________
|指针 | 值 | 变量的 |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] | //$c['one'][2] 被返回,$a,$b 被销毁
--------------------------------------- ?>
希望这有帮助。