Come abbiamo visto nelle ultime due lezioni, tramite le classi astratte è possibile attuare il concetto di polimorfismo uniformando il comportamento delle gerarchie di classi. Tuttavia, possiamo astrarre ulteriormente questo modello tramite le interfacce.
Le interfacce sono veri e propri "involucri" contenenti metodi senza un corpo definito, che possono essere implementate dalle classi. Queste ultime si impegnano a ridefinire tutti i metodi dell'interfaccia fornendo un'implementazione per gli stessi. I metodi delle interfacce infatti, vengono visti dalle classi come metodi astratti e dunque, se la classe non è astratta, deve ridefinirli obbligatoriamente.
Per dichiarare un'interfaccia si usa la keyword interface seguita dal nome desiderato e dalle parentesi graffe che contengono la lista di metodi:
interface MyInterface {
public function getName();
public function setName($name);
public function getAge();
public function setAge($age);
}
In questo caso ovviamente non abbiamo l'occorrenza di dichiarare i metodi come astratti tramite la keyword abstract, dato che le interfacce implicano questo concetto. A questo punto, l'interfaccia MyInterface è pronta per essere implementata da una classe: questo accade tramite la keyword implements:
class MyClass implements MyInterface {
// implementazione...
}
Ora, la classe MyClass deve ridefinire tutti e quattro i metodi definiti dall'interfaccia, rispettando namespace, indicatore di visibilità e lista di parametri:
class MyClass implements MyInterface {
// proprietà
public $name;
public $age;
// costruttore
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
// metodi
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
public function getAge() {
return $this->age;
}
public function setAge($age) {
$this->age = $age;
}
}
Se la classe non ridefinisce tutti i metodi dichiarati nell'interfaccia, deve essere obbligatoriamente dichiarata come abstract (ed eventualmente estesa di conseguenza), altrimenti viene generato un Fatal Error:
// Non abbiamo ridefinito il metodo getName: Fatl Error Fatal error: Class MyClass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (MyInterface::getName) in [...]
Di conseguenza , se l'interfaccia è implementata da una classe astratta, quest'ultima può anche non ridefinire tutti i metodi, sarà compito delle ulteriori sottoclassi farlo.
Una classe inoltre, può implementare più interfacce, facendo seguire la keyword implements con i nomi delle stesse separati da virgole:
class MyClass implements MyInterface1, MyInterface2, MyInterface3 {
// implementazione ...
}
L'unico accorgimento in questo caso è che le interfacce non contengano metodi aventi lo stesso nome, il che porterebbe ad una situazione piuttosto ambigua.
Tramite l'uso delle interfacce, è possibile creare delle gerarchie e delle API comuni, che utilizzano e condividono gli stessi namespace, le stesse regole di scrittura e lettura e dunque assumono la stessa forma. Questo permette di integrare più gerarchie nella stessa applicazione, ponendo delle regole precise che vanno ad uniformare il comportamento della stessa. Nella lezione successiva vedremo un semplice esempio pratico che aiuterà a carpire meglio la funzione delle interfacce e soprattutto a vederle utilizzate in uno scenario reale.
Sessioni PHP: cosa sono, come si usanoDalla configurazione di PHP, alla gestione delle sessioni in un... |
Continuous Integration: automatizziamo i client con PhingContinuous Integration: automatizziamo i client con Phing. Esempi... |
Archiviazione delle applicazioni PHP con PharCome incorporare intere applicazioni PHP all'interno di un singolo... |
I traits in PHP 5.4Cosa sono, a cosa servono e come si unsano i traits, la novità per... |
PHP 5.4: il web server integratoImpara ad usare il web server integrato nella versione 5.4 di PHP:... |
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Guida PHP con Windows e IISInstallare ambienti per lo sviluppo e la produzione di applicazioni... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |