ts.*_*ts. 5 php oop reflection variables reference
任何人都有想法是否可以销毁/更改在许多地方引用的php对象?unset显然只会破坏一个引用,有时手动跟踪所有引用都不是一个选项.有任何想法吗?也许反思中有一些我缺少的东西?
不,但您可以使用额外的间接级别.目前你有这个:
a b c a b (unset)
\ | / \ |
\ | / --> \ |
object object
Run Code Online (Sandbox Code Playgroud)
相反,你可以这样做:
a b c a b c
\ | / \ | /
\ | / --> \ | /
wrapper (unset)
|
|
object
Run Code Online (Sandbox Code Playgroud)
马克,很好的答案,但我不确定这将如何运作:
第一张图:
<?php
$obj = "foo";
$a = $obj;
$b = $obj;
$c = $obj;
$c = NULL;
unset( $c );
var_dump( $a, $b, $c );
Run Code Online (Sandbox Code Playgroud)
结果:
string(3) "foo"
string(3) "foo"
NULL
Run Code Online (Sandbox Code Playgroud)
第二张图:
<?php
$obj = "foo";
$wrapper =& $obj;
$a = $wrapper;
$b = $wrapper;
$c = $wrapper;
$c = NULL;
unset( $c );
var_dump( $a, $b, $c );
Run Code Online (Sandbox Code Playgroud)
结果:
string(3) "foo"
string(3) "foo"
NULL
Run Code Online (Sandbox Code Playgroud)
正确方法:
<?php
$obj = "foo";
$a =& $obj;
$b =& $obj;
$c =& $obj;
$c = NULL;
var_dump( $a, $b, $c );
Run Code Online (Sandbox Code Playgroud)
结果:
NULL
NULL
NULL
Run Code Online (Sandbox Code Playgroud)
解释:
您需要将变量 $a、$b、$c 引用到 $obj 的内存地址,这样当您将 $c 设置为 NULL 时,会将实际内存地址设置为 NULL,而不仅仅是引用。