там какой-либо путь состоит в том, чтобы получить доступ ко всем ссылкам на данный объект?

у кого-либо есть идея, если и как возможно уничтожить / изменяют объект php, на который ссылаются во многих местах? сброс, очевидно, уничтожает только одну ссылку, и иногда прослеживающий все ссылки вручную не опция. Какие-либо идеи? Возможно, существует что-то, что я пропускаю в Отражении?

5
задан ts. 23 May 2010 в 22:04
поделиться

2 ответа

Хороший ответ Марк, но я не уверен, как это будет работать:

Первая диаграмма:

<?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, а не просто в ссылку.

3
ответ дан 14 December 2019 в 01:02
поделиться

Нет, но вместо этого вы можете использовать дополнительный уровень косвенности. Сейчас у вас есть следующее:

 a    b     c           a    b    (unset)
  \   |    /             \   |
   \  |   /    -->        \  |
    object                 object

Вместо этого вы можете сделать следующее:

 a    b     c           a    b     c
  \   |    /             \   |    /
   \  |   /    -->        \  |   /
   wrapper                (unset)
      |
      |
   object
6
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: