2010-05-23 135 views
5

任何人有想法,如何以及如何銷燬/更改許多地方引用的php對象?未設置顯然會破壞只有一個引用,有時手動跟蹤所有引用不是一個選項。有任何想法嗎?也許我在思考中缺少某些東西?有沒有辦法訪問給定對象的所有引用?

回答

3

尼斯回答馬克,但我不知道如何做到這一點的工作:

第一個圖:

<?php 

$obj = "foo"; 
$a = $obj; 
$b = $obj; 
$c = $obj; 

$c = NULL; 
unset($c); 
var_dump($a, $b, $c); 

結果:

string(3) "foo" 
string(3) "foo" 
NULL 

第二個圖:

<?php 

$obj = "foo"; 
$wrapper =& $obj; 
$a = $wrapper; 
$b = $wrapper; 
$c = $wrapper; 

$c = NULL; 
unset($c); 
var_dump($a, $b, $c); 

結果:

string(3) "foo" 
string(3) "foo" 
NULL 

正確方法:

<?php 

$obj = "foo"; 
$a =& $obj; 
$b =& $obj; 
$c =& $obj; 

$c = NULL; 
var_dump($a, $b, $c); 

結果:

NULL 
NULL 
NULL 

說明:

你需要引用您的變量 $ A,$ B,$ C到 $ obj中的內存地址,此當您將$ c設置爲 NULL時,這會將實際內存地址 設置爲NULL,而不僅僅是參考。

+0

儘管實際上,在設置對象的引用時,使用引用來設置它並不總是更容易。 – andho 2011-05-26 09:51:39

6

不,但您可以使用額外的間接級別。目前,你有這樣的:

a b  c   a b (unset) 
    \ | /   \ | 
    \ | / -->  \ | 
    object     object 

相反,你可以這樣做:

a b  c   a b  c 
    \ | /   \ | /
    \ | / -->  \ | /
    wrapper    (unset) 
     | 
     | 
    object 
+0

不錯的視覺答案。 – webbiedave 2010-05-23 22:16:15

相關問題