任何人都知道是否可以销毁/更改许多地方引用的php对象? unset显然只会破坏一个引用,有时手动跟踪所有引用都不是一个选项。有任何想法吗?也许在反思中我缺少一些东西?
答案 0 :(得分:6)
不,但您可以使用额外的间接级别。目前你有这个:
a b c a b (unset)
\ | / \ |
\ | / --> \ |
object object
相反,你可以这样做:
a b c a b c
\ | / \ | /
\ | / --> \ | /
wrapper (unset)
|
|
object
答案 1 :(得分: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而不仅仅是引用。