关于php的unset

关于php的unset

php的unset很特别。

简单的说:

参考php手册:

<?php
/* Imagine this is memory map
  ______________________________
|pointer | value | variable              |
  -----------------------------------
|   1     |  NULL  |         ---           |
|   2     |  NULL  |         ---           |
|   3     |  NULL  |         ---           |
|   4     |  NULL  |         ---           |
|   5     |  NULL  |         ---           |
------------------------------------
Create some variables   */
$a =10;
$b =20;
$c = array  ( 'one' => array  (1, 2, 3));
/* Look at memory
  _______________________________
|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];
/* Look at memory
  _______________________________
|pointer | value |       variable's       |
  -----------------------------------
|   1     |  NULL  |       ---              |  //value of  $a is destroyed and pointer is free
|   2     |  20     |       $b               |
|   3     |  1       |      $c['one'][0]   |
|   4     |  2       |      $c['one'][1]   |
|   5     |  3       |  $c['one'][2]  ,$a | // $a is now here
------------------------------------
do  */
$b =& $a // or  $b=&$c['one'][2]; result is same as both "$c['one'][2]" and "$a" is at same pointer.
/* Look at memory
  _________________________________
|pointer | value |       variable's           |
  --------------------------------------
|   1     |  NULL  |       ---                  | 
|   2     |  NULL  |       ---                  |  //value of  $b is destroyed and pointer is free
|   3     |  1       |      $c['one'][0]       |
|   4     |  2       |      $c['one'][1]       |
|   5     |  3       |$c['one'][2]  ,$a , $b |  // $b is now here
---------------------------------------
next do */
unset( $c [ 'one' ][2]);
/* Look at memory
  _________________________________
|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]  is  destroyed not in memory, not in array
---------------------------------------
next do   */
$c [ 'one' ][2]=500;    //now it is in array
/* Look at memory
  _________________________________
|pointer | value |       variable's           |
  --------------------------------------
|   1     |  500    |      $c['one'][2]       |  //created it lands on any(next) free pointer in memory
|   2     |  NULL  |       ---                  | 
|   3     |  1       |      $c['one'][0]       |
|   4     |  2       |      $c['one'][1]       |
|   5     |  3       |      $a , $b              | //this pointer is in use
---------------------------------------
lets tray to return $c['one'][2] at old pointer an remove reference $a,$b.  */
$c [ 'one' ][2]=& $a ;
unset( $a );
unset( $b );  
/* look at memory
  _________________________________
|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] is returned, $a,$b is destroyed
--------------------------------------- ?>
I hope this helps.

如此便能够说明php 的 unset是如何进行的。

引用地址:http://www.cnblogs.com/windk/archive/2011/07/06/2099474.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值