PHP, gli oggetti e i riferimenti

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
27
Roma
alessandro1997.netsons.org
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:
PHP:
<?php
$a = new stdClass();
$b = $a;
$a = 'ciao';
var_dump($b);
?>
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:
PHP:
<?php
$a = new stdClass();
$b = $a;
$a->foo = 'bar';
var_dump($b->foo);
?>
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.
 

Discussioni simili