View Full Version : [PHP] Puntatore e istanze oggetti
Ciao, volevo sapere quale è la differenza tra assegnare ad una variabile un riferimento ad un'istanza o l'istanza stessa.
$a = new A();
$b = $a;
$b = &$a;
//quale è la differenza tra la seconda e la terza istruzione
Squall 94
02-05-2013, 22:15
Non me lo sono mai posto come problema tantomeno me l'ero immaginato .
Comunque provando a ragionare dandogli l'istanza stessa nella memoria la locazione sarà la stessa, mentre invece sovrascrivendo la variabile normalmente, il contenuto di essa andrà a finire in un'altra locazione di memoria .
Non ho mai visto una cosa simile, ho provato a ragionare ammesso che questa cosa esista :D .
Comunque mi sembra una cosa possibile, adesso sono curioso :D .
Ho trovato questo esempio che mi ha chiarito le idee.
<?php
// create an object and a copy as well as a reference to the variable
$a = new stdclass;
$b = $a;
$c = &$a;
// Do something with the object
$a->foo = 42;
var_dump($a->foo);
var_dump($b->foo);
var_dump($c->foo);
echo "\nchange the variable itself\n";
$a = 42;
var_dump($a);
var_dump($b);
var_dump($c);
?>
int(42)
int(42)
int(42)
change the variable itself
int(42)
object(stdClass)#1 (1) {
["foo"]=>
int(42)
}
int(42)
In pratica assegnando la referenza ad un'altra variabile si crea un nuovo nome per lo stesso spazio in memoria. Mentre assegnando l'istanza ad una nuova variabile si crea uno nuovo spazio di memoria in cui viene salvato il puntatore all'istanza.
Con l'istruzione $a = 42; si modifica lo spazio di memoria identificato dal nome $a e $c che viene adibito al salvataggio di int. Mentre $b è uno spazio di memoria a sé che accoglie ancora il puntatore ad istanza.
Ipotizzo sia più o meno così.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.