Classi php reference, clone, duplicate

 

È molto interessante notare la differenza tra clonazione, duplicazione e referenza ad una classe. In questo piccolo articolo ci chiariremo le idee in tal senso.

Vi invito ad eseguire lo script che segue in un file .php

Il risultato che io ottengo è il seguente:

Come dobbiamo interpretare questo risultato?

La questione è molto semplice come possiamo vedere:

  • $class è la classe sorgente;
  • $a  rappresenta una copia di $class ottenuta per assegnazione (tramite l’operatore di assegnazione ‘=’);
  • $b referenzia $a, significa che è un puntatore alla risorsa, non un suo duplicato;
  • $c è invece un clone della classe.

Quello che vediamo nei 3 var_dump è:

  • che $a e $b si comportano allo stesso modo e dal numero identificativo della risorsa (quello con il cancelletto) capiamo che si tratta della stessa cosa (ovvero di puntatori a $class);
  • $c invece rappresenta una nuova istanza della classe (stdClass) ottenuta per clonazione.