Le interfacce



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.

Sintassi delle interfacce

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.

Conclusione

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.

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