php如何通过变量销毁unset的过程讲解
2019獨角獸企業重金招聘Python工程師標準>>>
php如何通過變量銷毀unset的過程講解
unset -- 釋放給定的變量
描述
void unset ( mixed var [, mixed var [, ...]])
unset() 銷毀指定的變量。注意在 PHP 3 中,unset() 將返回 TRUE(實際上是整型值 1),而在 PHP 4 中,unset() 不再是一個真正的函數:它現在是一個語句。這樣就沒有了返回值,試圖獲取 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是如何進行的
先要強調的一點是unset在php中已經不再是一個函數了,既然不是函數,那么就沒有了返回值,所以用的時候不能夠用unset的返回值來做判斷。
其次,在函數中,unset只能銷毀局部變量,并不能銷毀全局變量,來看下手冊的一個例子
<?php
function destroy_foo() {
global $foo;
unset($foo);
}
$foo = ‘bar’;
destroy_foo();
echo $foo;
?>
返回的結果為
bar http://www.3ppt.com/Design/PHP/50278.html
轉載于:https://my.oschina.net/u/126154/blog/27906
總結
以上是生活随笔為你收集整理的php如何通过变量销毁unset的过程讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (译)如何使用cocos2d制作一个塔防
- 下一篇: ubuntu 下使用KVM安装redha