Copia degli oggetti in PHP

Questo primo articolo del blog voglio che rappresenti in pieno la mia idea di conoscenza di un linguaggio.

Per essere fin da subito chiari: per PHP intendo v5.x. Tutto ciò che c’è stato  prima è praticamente archeologia informatica e avrebbe senso parlarne solo per ricordare i vecchi tempi.

In molti conoscono la sintassi del PHP ma ancora di più programmatori non si sono mai chiesti il come mai di alcuni funzionamenti.

Per fare un ripassino: in PHP esistono tre tipi di variabiali: gli scalari, gli array,  e gli oggetti ovvero istanze di una classe.

PHP non è un linguaggio fortemente tipizzato, per cui uno scalare è un contenitore di un tipo base. Che poi dentro ci sia una stringa, un intero, float etc è una decisione lasciata al programmatore, e cosa farne sono problemi suoi.

Un oggetto è l’allocazione in memoria di una rappresentazione o modello, detta Classe.

In PHP nelle classi di default non c’è possibilità di ridefinire gli operatori come ad esempio in C++ e l’unico operatore che si possa applicare a due oggetti è l’assegnamento (=).

Se per caso come nell’esempio precedente abbiamo utilizzato l’operatore = per duplicare l’oggetto $a in $b, il risultato non sarà quello aspettato.

Ancora un esempio:

In questo esempio l’istruzione  echo $a->attr_a; che output darà? La risposta è 2;

Adesso arriviamo al perché. In PHP l’operatore assegnamento tra oggetti non corrisponde a =.

L’operatore = in questo caso è la creazione di una referenza per l’oggetto $a. La variabile $b è semplicemente un’altro nome della memoria allocata per $a. La stessa cosa avviene nei parametri attuali delle funzioni.

Anche qui il passaggio avviene per riferimento.

Come si fa allora la copia degli oggetti in PHP? Bisogna introdurre il concetto di: clone. Il clone di un oggetto è la copia della definizione dell’oggetto (tipologia di classe) e di tutto il suo stato attuale in memoria. Tale oggetto sarà dunque una copia precisa e indipendente dall’altro.

clone è il costrutto che fa questo.

Per concludere: il PHP ha trovato un posto nell’olimpo dei linguaggi di programmazione perché  alla facile gestione dei dati testuali (cosa che lo rende ottimo per il web), si affianca la facilità di apprendimento delle basi, grazie alla sintassi c-like. Questo non vuol dire che sia un linguaggio poco valido perché semplice. Come avete visto non è così. Le sfaccettature sono molteplici e le opzioni che ha in mano un programmatore sono sempre di più. Ad esempio le ultime versioni stanno portando sempre più novità OOP rendendolo di fatto un linguaggio ancora più completo, il che ci permetter di scrivere velocemente codice migliore e mantenibile.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *