In questo terzo tutorial sulla programmazione ad oggetti in PHP andremo a parlare del metodo costruttore, vedremo cos’è e a cosa serve. Negli articoli precedenti “Programmazione ad oggetti in PHP: parte 1” e “Programmazione ad oggetti in PHP: parte 2” abbiamo visto come si crea e come si usa una classe, un’ oggetto, una proprietà e un metodo. Abbiamo anche detto tra le tante cose che la classe è un modello di una qualsiasi cosa e l’oggetto è la sua rappresentazione pratica. Tornando all’ esempio dell’automobile la sua classe ne sarà il progetto e l’ oggetto sarà la sua rappresentazione fisica reale, quindi da un progetto di un automobile posso avere infinite automobili, queste infinite automobili possono avere alcune caratteristiche comuni e alcune caratteristiche diverse tra loro, ovvero possono avere lo stesso numero di marce ma possono essere di colore diverso o di essere di cilindrata diversa. Da questo possiamo dire che ogni oggetto di tipo Automobile deve avere delle caratteristiche specifiche proprio di quell’ automobile che rappresenta. Vediamo un esempio pratico:
<?php // Creo la classe Class Automobile{ public $numeroDiMArce = 5; public $colore; public $cilindrata; } // Istanzio la classe in tre oggetti $auto1 = new Automobile(); $auto2 = new Automobile(); $auto3 = new Automobile(); // Vado a definire le proprietà degli oggetti $auto1->colore = "verde"; $auto1->cilindrata = "1200"; $auto2->colore = "rossa"; $auto2->cilindrata = "1600"; $auto3->colore = "blu"; $auto3->cilindrata = "1900"; ?>
Nell’esempio precedente sono stati creati tre oggetti dalla classe Automobile e definiti valori di proprietà quali colore e cilindrata diverse tra loro, lasciando solo il numero di marce comune a tutti (anche se questo valore si sarebbe potuto cambiare tranquillamente a piacimento per ogni determinato oggetto). Quindi abbiamo tre oggetti della stessa famiglia generati dallo stesso modello con caratteristiche diverse tra loro.
Un’ altro esempio si potrebbe fare con una classe Persone che dallo stesso modello si possono generare tanti oggetti di tipo Persone tutti diversi tra loro, differenziandosi per esempio dal nome, dal cognome, dall’altezza, dal colore dei capelli ecc….
Il costruttore.
Prima di parlare del costruttore vorrei fare una precisazione sulle righe scritte in precedenza. Se in un oggetto avessi provato a richiamare una proprietà senza averne definito alcun valore, l’interprete PHP avrebbe generato un’eccezione (un errore). Se nel definire il valore di una proprietà avessi sbagliato a scriverne il nome ad esempio al posto di $auto1->colore avessi scritto $auto1->colori, l’interprete PHP avrebbe aggiunto una nuova proprietà colori solo e solamente ad $auto1.
Premesso questo passiamo subito al costruttore.
Per perfezionare il codice precedente le proprietà definite dei singoli oggetti, visti nel listato, si possono tutti scrivere in una sola riga durante la fase d’ istanziazione della classe per creare l’oggetto. Le proprietà vanno inserite tra le parentesi tonde dopo il nome della classe, per esempio così:
$auto2 = new Automobile("rossa", "1200");
Con i valori di proprietà così inseriti, in quel momento verrà richiamata in automatico un metodo particolare chiamato __construct().
Quel metodo è un metodo particolare che serve a costruire l’oggetto, viene richiamato in automatico durante la creazione dell’oggetto e fa parte dei magic methods.
Vediamo ora come si usa:
public function __contruct($colore, $cilindrata) { $this->colore = $colore; $this->cilindrata = $cilindrata; }
Ed ecco abbiamo visto come si definiscono le proprietà di un oggetto. Riepilogando semplicemente si passano i valori come parametri in fase di creazione dell’ oggetto, in quel momento viene richiamato il metodo magico __construct() che recupera i parametri, per poi venire assegnati alle proprietà definite nella classe. Riscriviamo adesso completamente il primo listato utilizzando l’uso del costruttore.
<?php // Creo la classe Class Automobile{ public $numeroDiMArce = 5; public $colore; public $cilindrata; // Definisco il costruttore public function __contruct($colore, $cilindrata) { $this->colore = $colore; $this->cilindrata = $cilindrata; } } // Istanzio la classe in tre oggetti $auto1 = new Automobile("verde", "1200"); $auto2 = new Automobile("rossa","1600"); $auto3 = new Automobile("blu","1900"); ?>
Il risultato è un codice più snello e pulito, più facile da editare e da mantenere.
Mettiamo ora in evidenza un particolare. Possiamo mettere dei valori di default tra i parametri del costruttore, che nel caso che in fase di costruzione non venga passato un valore per un qualsiasi motivo, possiamo avere comunque dei valori di default che evitano il generarsi di errori, come nell’esempio seguente:
public function __construct($colore = "giallo") { $this->colore=$colore; }
Dall’esempio precedente, se in fase di creazione dell’oggetto non viene passato alcun valore della proprietà colore al costruttore, di default verrà assegnato il valore giallo.
I “magic methods”
Prima di chiudere vediamo in breve cosa sono i metodi magici di PHP. I magic methods sono metodi speciali che vengono richiamati in automatico dall’ interprete PHP al verificarsi di determinati eventi come per esempio l’appena visto __construct(). Oltre a __construct() c’è ne sono anche altri con funzionalità diverse che vedremo in particolare nei prossimi tutorial. I metodi magici si riconoscono che davanti al nome hanno un doppio underscore che li contraddistingue come per esempio __construct(), __desctruct(), __get(), __set(), ecc…
SviluppoMania
StayTuned