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.bkjia.com/phper/php/37201.htm