qualcuno ha idea se e in che modo è possibile distruggere/modificare l'oggetto php a cui si fa riferimento in molti posti? Unset ovviamente distrugge solo un riferimento e talvolta tracciare manualmente tutti i riferimenti non è un'opzione. Qualche idea? Forse c'è qualcosa che mi manca in Reflection?c'è un modo per accedere a tutti i riferimenti a un determinato oggetto?
5
A
risposta
3
risposta Nizza Mark, ma non sono sicuro di come questo dovrebbe funzionare:
primo schema:
<?php
$obj = "foo";
$a = $obj;
$b = $obj;
$c = $obj;
$c = NULL;
unset($c);
var_dump($a, $b, $c);
Risultati:
string(3) "foo"
string(3) "foo"
NULL
secondo diagramma:
<?php
$obj = "foo";
$wrapper =& $obj;
$a = $wrapper;
$b = $wrapper;
$c = $wrapper;
$c = NULL;
unset($c);
var_dump($a, $b, $c);
Risultati:
string(3) "foo"
string(3) "foo"
NULL
modo corretto:
<?php
$obj = "foo";
$a =& $obj;
$b =& $obj;
$c =& $obj;
$c = NULL;
var_dump($a, $b, $c);
Risultati:
NULL
NULL
NULL
Spiegazione:
È necessario fare riferimento le variabili $ a, $ b, $ c per l'indirizzo di memoria di $ obj, questo modo quando si imposta $ c a NULL, questo imposterà l'indirizzo di memoria effettivo in NULL invece del solo riferimento.
6
No, ma è possibile utilizzare un livello aggiuntivo di riferimento indiretto. Attualmente si dispone di questo:
a b c a b (unset)
\ | / \ |
\ | / --> \ |
object object
Invece si può fare questo:
a b c a b c
\ | / \ | /
\ | / --> \ | /
wrapper (unset)
|
|
object
+0
Bella risposta visiva. – webbiedave
sebbene pragmaticamente, quando si imposta un riferimento a un oggetto, non è sempre più facile impostarlo utilizzando un riferimento. – andho