Clonare gli oggetti



Come abbiamo imparato dalla precedente lezione, con la versione 5 di PHP gli oggetti vengono trattati per riferimento, sempre e comunque. Questo comportamento porta indubbiamente dei vantaggi, ma... se volessimo lavorare con delle copie invece che con dei riferimenti? PHP ha una soluzione anche per questo: l'operatore clone.

L'operatore clone permette, come indica la parola, di clonare un oggetto con tutte le sue coppie proprietà/valori: l'oggetto risultante (clonato) non sarà legato all'oggetto originale tramite un riferimento, ma sarà una copia vera e propria: ciò significa che eventuali aggiunte o modifiche al clone non incideranno sull'originale. Ecco un semplice esempio:

class A {

        public $a = 10;
        public $c = 20;
        public $d = 30;

}

$obj1 = new A;
$obj2 = clone $obj1;

$obj2->a = 40;
$obj2->e = 50;

// stampa 10
echo $obj1->a;

// stampa 40
echo $obj2->a;

// stampa
// Notice: Undefined property: A::$e in C:\Program Files\wamp\www\HTML.it\PHP\guida_oop\lez_18.php on line 98
echo $obj1->e;

Una nozione fondamentale che occorre conoscere è che quando di clona un oggetto si crea una copia di primo livello: eventuali proprietà che rappresentano riferimenti ad altre variabili, rimarranno riferimenti:

class Foo {
        public $foo = 10;
}

class A {

        public $a = 10;
        public $c = 20;
        public $d = 30;

        public function __construct() {
                $this->e = new Foo;
        }
}

$obj1 = new A;
$obj2 = clone $obj1;

$obj2->e->foo = 20;

// stampa 20
echo $obj1->e->foo;

// stampa 20
echo $obj2->e->foo;

Come possiamo vedere la proprietà denominata "e" è un oggetto, dunque anche se si clona l'istanza $obj1, la proprietà "e" della variabile risultante si riferirà comunque alla medesima proprietà dell'oggetto originale.

Metodo magico __clone

Come abbiamo visto nella lezione dedicata al metodo costruttore, la OOP di PHP ci fornisce dei metodi magici che vengono azionati quando si presentano delle determinati situazioni. Una di questa è rappresentata dalla clonazione degli oggetti e può essere gestita tramite il metodo magico __clone, come vedremo tra qualche lezione. Tramite l'uso di questo metodo sarà possibile mettere in pratica delle operazioni davvero interessanti.

Quando e perché clonare gli oggetti

Avere a disposizione anche la possibilità di creare copie degli oggetti è un grande vantaggio per gli sviluppatori. Se vogliamo creare delle copie perfette delle nostre istanze, senza che queste siano legate alle controparti originali, la clonazione rappresenta la soluzione ideale.

Conclusione

Un altro tassello offerto dagli extra della OOP in PHP è stato completato. Quello della clonazione degli oggetti è il completamento naturale della gestione dei riferimenti degli oggetti: a questo punto della guida possiamo creare oggetti normali e dunque per riferimento oppure clonarli, creando delle copie vere e proprie: per ogni situazione immaginabile PHP ci pone una soluzione.

Ultimi articoli PHP

Sessioni PHP: cosa sono, come si usano

Dalla configurazione di PHP, alla gestione delle sessioni in un...

Continuous Integration: automatizziamo i client con Phing

Continuous Integration: automatizziamo i client con Phing. Esempi...

Archiviazione delle applicazioni PHP con Phar

Come incorporare intere applicazioni PHP all'interno di un singolo...

I traits in PHP 5.4

Cosa sono, a cosa servono e come si unsano i traits, la novità per...

PHP 5.4: il web server integrato

Impara ad usare il web server integrato nella versione 5.4 di PHP:...

Altri articoli

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Guida PHP con Windows e IIS

Installare ambienti per lo sviluppo e la produzione di applicazioni...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti