Quando vuoi che da una assegnazione non venga fatta una copia ma venga passato il riferimento all'oggetto devi fare usare "=&"
Ti faccio un breve esempio
Codice PHP:
<?php
class prova
{
var $variabile;
function prova($valore)
{
$this->variabile = $valore;
}
}
$array = array();
$array["primo"] = new prova("primo");
$array["secondo"] = new prova("secondo");
$estratto =& $array["primo"];
echo $estratto->variabile."
";
$estratto->variabile = "primo modificato";
$estratto2 =& $array["primo"];
echo $estratto2->variabile."
";
$estratto2->variabile = "primo modificato ancora";
echo $estratto->variabile;
?>
Il risultato di questa pagina è
primo
primo modificato
primo modificato ancora
Quindi, come puoi vedere, quando ho fatto
$estratto =& $array["primo"]
Non ho copiato $array["primo"] ma ne ho creato un "riferimento", ovvero ogni modifica a $estratto è come se avvenisse su $array["primo"], infatti estraendo di nuovo il dato con
$estratto2 =& $array["primo"]
La modifica fatta su $estratto infatti si ripercuote su $estratto2 e quella su $estratto2 si ripercuote ancora su $estratto (e quindi su $array["primo"])
In pratica $estratto, $estratto2 e $array["primo"] sono tre riferimenti allo stesso oggetto.
Spero di essere stato chiaro
P.S.
In php5 questa cosa viene fatta in automatico (come è giusto che sia) e per creare una copia di un oggetto si fa
Codice PHP:
$oggettocopiato = clone $oggetto;