简单看看 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 被销毁
--------------------------------------- ?>
我希望这有帮助。