2010-05-23 118 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

相关问题