有没有办法访问给定对象的所有引用?

ts.*_*ts. 5 php oop reflection variables reference

任何人都有想法是否可以销毁/更改在许多地方引用的php对象?unset显然只会破坏一个引用,有时手动跟踪所有引用都不是一个选项.有任何想法吗?也许反思中有一些我缺少的东西?

Mar*_*ers 6

不,但您可以使用额外的间接级别.目前你有这个:

 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)


Pet*_*son 3

马克,很好的答案,但我不确定这将如何运作:

第一张图:

<?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,而不仅仅是引用。