有没有人知道如何销毁/更改在许多地方引用的PHP对象?显然,unset只能销毁一个引用,有时手动跟踪所有引用不是一个选项。有什么想法吗?也许在Reflection中我漏掉了什么?
有没有人知道如何销毁/更改在许多地方引用的PHP对象?显然,unset只能销毁一个引用,有时手动跟踪所有引用不是一个选项。有什么想法吗?也许在Reflection中我漏掉了什么?
a b c a b (unset)
\ | / \ |
\ | / --> \ |
object object
你可以这样做:
a b c a b c
\ | / \ | /
\ | / --> \ | /
wrapper (unset)
|
|
object
<?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,而不仅仅是引用。