php 变量 unset,php如何通过变量销毁unset的过程讲解

php如何通过变量销毁unset的过程讲解

unset -- 释放给定的变量

描述

void unset ( mixed var [, mixed var [, ...]])

unset() 销毁指定的变量。注意在 PHP 3 中,unset() 将返回 TRUE(实际上是整型值 1),而在 PHP 4 中,unset() 不再是一个真正的函数:它现在是一个语句。这样就没有了返回值,试图获取 unset() 的返回值将导致解析错误。

参考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是如何进行的

先要强调的一点是unset在php中已经不再是一个函数了,既然不是函数,那么就没有了返回值,所以用的时候不能够用unset的返回值来做判断。

其次,在函数中,unset只能销毁局部变量,并不能销毁全局变量,来看下手册的一个例子

function destroy_foo() {

global $foo;

unset($foo);

}

$foo = ‘bar’;

destroy_foo();

echo $foo;

?>

返回的结果为

bar http://www.3ppt.com/Design/PHP/50278.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值