简单的看一下php reference 是如何工作的
<?php
/* 图片为内存变化图
______________________________
|pointer | value | variable |
-----------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | NULL | --- |
| 4 | NULL | --- |
| 5 | NULL | --- |
------------------------------------
创建一些变量 */
$a = 10 ;
$b = 20 ;
$c =array ( 'one' =>array ( 1 , 2 , 3 ));
/* 查看内存
_______________________________
|pointer | value | variable's |
-----------------------------------
| 1 | 10 | $a |
| 2 | 20 | $b |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] |
------------------------------------
do */
$a =& $c [ 'one' ][ 2 ];
/* 查看内存
_______________________________
|pointer | value | variable's |
-----------------------------------
| 1 | NULL | --- | // $a 的值被销毁并且 pointer free
| 2 | 20 | $b |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] ,$a | // $a 现在在这里
------------------------------------
do */
$b =& $a ; // "$c['one'][2]" 和 "$a" 为同一pointer.
/* 查看内存
_________________________________
|pointer | value | variable's |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- | //$b 的值被销毁并且 pointer free
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 |$c['one'][2] ,$a , $b | // $b 现在在这里
---------------------------------------
next do */
unset( $c [ 'one' ][ 2 ]);
/* 查看内存
_________________________________
|pointer | value | variable's |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $a , $b | // $c['one'][2] 被销毁
---------------------------------------
next do */
$c [ 'one' ][ 2 ]= 500 ; //now it is in array
/* 查看内存
_________________________________
|pointer | value | variable's |
--------------------------------------
| 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 ;
unset( $a );
unset( $b );
/* 查看内存
_________________________________
|pointer | value | variable's |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] | //$c['one'][2] 被返回, $a,$b 被销毁
--------------------------------------- ?>
How PHP Reference works?
最新推荐文章于 2024-07-15 15:59:36 发布