2010-05-23 14 views

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.

+0

sebbene pragmaticamente, quando si imposta un riferimento a un oggetto, non è sempre più facile impostarlo utilizzando un riferimento. – andho

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

Problemi correlati