Come abbiamo visto nella lezione precedente, tramite il modello orientato agli oggetti, è possibile centralizzare più funzionalità all'interno di un'unica postazione. Questa postazione prende il nome di classe. Una classe è una "struttura" con al suo interno proprietà e metodi che condividono funzionalità e risorse, che rimangono in attesa di essere utilizzate tramite le istanze della classe stessa.
Creazione di una classe
La creazione di una classe, come in altri linguaggi di programmazione, viene definita tramite la keyword class
seguita dal nome della classe.
<?php
class Person {
...// dichiarazione delle proprietà
...// dichiarazione costruttore e distruttore
...// dichiarazione e definizione dei metodi
}
?>
Una volta dichiarata la classe, possiamo passare all'inserimento delle funzionalità, tramite la dichiarazione di proprietà e metodi.
<?php
class Person {
//proprietà
private $name = "";
//costruttore
public function __construct($name)
{
//inizializzazione della proprietà $name
$this->name = $name;
}
//metodi
public function getName() {
//$this rappresenta l'oggetto che sarà costruito a runtime
return $this->name;
}
}
//istanzia un nuovo oggetto della classe Person
$customer1 = new person("Giuseppe Rossi");
echo "Cliente: ".$customer1->getName()."<br>";
//istanzia un nuovo oggetto della classe Person
$customer2 = new person("Guglielmo Cancelli");
echo "Cliente: ".$customer2->getName()."<br>";
?>
Osservando la classe proposta, possiamo notare l'unica proprietà name
con la parola chiave private
. Della parola chiave private
e degli altri indicatori di visibilità parleremo in dettaglio nei prossimi capitoli. Per il momento ci basterà sapere che la proprietà name
può essere utilizzata solo dai metodi interni alla classe e quindi non è visibile all'esterno della classe. Infatti, per accedere al contenuto di questa proprietà è stato creato un metodo ad hoc getName()
.
Variabile $this
Per istanziare gli attributi/proprietà della classe, e in generale per accedere ad essi, si usa la sintassi:
$this->name;
dove $this
rappresenta l'oggetto costruito a runtime e quindi avrà dei valori all'interno della proprietà. La stessa sintassi, inoltre, si utilizza per richiamare un metodo della classe su un oggetto.
Infatti, l'obiettivo del metodo getName()
, è restituire una copia del valore contenuto nella proprietà $name
, utilizzando l'istanza dell'oggetto rappresentata all'interno della classe da $this
e recuperando il valore della proprietà attraverso il simbolo ->
.
Costruttore
Nella classe Person
abbiamo definito il metodo (o metodo magico) __construct
, che è il costruttore della classe.
public function __construct($name)
{
//inizializzazione della proprietà $name
$this->name = $name;
}
Disponibile dalla versione PHP 5, questo metodo magico a differenza del PHP4 e di altri linguaggi di programmazione, non ha lo stesso nome della classe. Se in PHP5, una classe non dovesse avere questo metodo, si potrà utilizzare il vecchio stile di programmazione e verrà quindi creato un metodo con lo stesso nome della classe.
I diversi "metodi magici" nella OOP di PHP, attivati al verificarsi di determinati eventi e contrassegnati dal doppio underscore __
iniziale, verranno analizzati dettagliatamente nei successivi capitoli.
Il costruttore, come ogni altro metodo, può contenere parametri. Nel nostro caso, infatti, il parametro che viene passato al costruttore viene utilizzato per inizializzare la proprietà $name
, grazie all'istanza a runtime dell'oggetto, cioè $this
.
Distruttore
Con PHP 5 è stato introdotto anche il concetto del distruttore (__destruct()
). Questo metodo, già presente in altri linguaggi OOP, viene chiamato automaticamente dal motore di PHP prima che l'oggetto sia distrutto. Risulta molto utile, ad esempio, per chiudere gli handle dei files, le connessioni al database o altre operazioni da eseguire prima che l'oggetto venga distrutto. Nel caso del nostro esempio il distruttore non fa nulla, e quindi potremmo anche non definirlo.
Istanza della classe
Una volta visti i principali elementi che compongono una classe, possiamo vedere come questa può essere utilizzata. Nel nostro esempio, non solo abbiamo definito una classe, ma anche creato un'istanza
utilizzando la seguente sintassi:
//creazione oggetto $costumer1 istanza della classe Person
$customer1 = new person("Giuseppe Rossi");
La parola chiave new
restituisce un riferimento all'oggetto creato. Ora, utilizzando l'oggetto $costumer1
possiamo accedere a qualsiasi proprietà o metodo utilizzando la sintassi vista in precedenza: $customer1->getName();
Conclusioni
Lo scopo di questa parte della guida è quello di mostrare un primo approccio alla programmazione ad oggetti in PHP fornendo un semplice esempio. Nel prossimo capitolo, ci soffermeremo sugli indicatori di visibilità: public
, protected
e private
per proprietà e metodi.