у кого-либо есть идея, если и как возможно уничтожить / изменяют объект php, на который ссылаются во многих местах? сброс, очевидно, уничтожает только одну ссылку, и иногда прослеживающий все ссылки вручную не опция. Какие-либо идеи? Возможно, существует что-то, что я пропускаю в Отражении?
Хороший ответ Марк, но я не уверен, как это будет работать:
Первая диаграмма:
<?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, а не просто в ссылку.
Нет, но вместо этого вы можете использовать дополнительный уровень косвенности. Сейчас у вас есть следующее:
a b c a b (unset)
\ | / \ |
\ | / --> \ |
object object
Вместо этого вы можете сделать следующее:
a b c a b c
\ | / \ | /
\ | / --> \ | /
wrapper (unset)
|
|
object