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

时间:2010-05-23 22:04:53

标签: php oop reflection variables reference

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

2 个答案:

答案 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而不仅仅是引用。