Chi ha studiato in dettaglio il funzionamento dei riferimenti in PHP (che ormai vengono usati piuttosto poco, per fortuna) ha probabilmente letto da qualche parte che "in PHP gli oggetti sono sempre assegnati come riferimenti". Anch'io avevo dato questa cosa per scontata, finché ieri su IRC (##php su freenode.net) un utente ha chiesto dettagli proprio su questo argomento. Gli è stato risposto che in realtà gli oggetti non vengono assegnati come riferimenti, ma funzionano come se fosse così. Prendete per esempio questo codice:
Se $b facesse davvero riferimento ad $a, allora a questo punto anche $b sarebbe "ciao", mentre invece mantiene il valore originale.
Prendete, però, questo esempio:
In questo caso il risultato è "bar", dunque la variabile $b sembrerebbe un riferimento.
In sintesi, possiamo dire che se cambia lo stato dell'oggetto contenuto in $a, allora cambia anche quello dell'oggetto contenuto in $b (e viceversa). Se invece cambia il valore di $a, quello di $b rimane immutato.
Per chi volesse approfondire: http://blog.golemon.com/2007/01/youre-being-lied-to.html.
PHP:
<?php
$a = new stdClass();
$b = $a;
$a = 'ciao';
var_dump($b);
?>
Prendete, però, questo esempio:
PHP:
<?php
$a = new stdClass();
$b = $a;
$a->foo = 'bar';
var_dump($b->foo);
?>
In sintesi, possiamo dire che se cambia lo stato dell'oggetto contenuto in $a, allora cambia anche quello dell'oggetto contenuto in $b (e viceversa). Se invece cambia il valore di $a, quello di $b rimane immutato.
Per chi volesse approfondire: http://blog.golemon.com/2007/01/youre-being-lied-to.html.