Interfacce cosa sono e come si usano
Imparare ad usare le interfacce in PHP5. Codici ed esempi.
Un’interfaccia consente di specificare che un oggetto è in grado di svolgere una certa funzione, ma non necessariamente spiega come l’oggetto opera. Non è possibile definire attributi ma si definiscono una serie di metodi che le classi dovranno implementare. Un’interfaccia si dichiara con la keyword interface. Le classi che implementano l’interfaccia devono aggiungere
implements <NomeInterfaccia>
nella dichiarazione della classe.
interface Storable {
function getContentsAsText();
}
class Document implements Storable {
public function getContentsAsText() {
return "Ciao Mondo
";
}
}
class Indexer {
public function readAndIndex(Storable $s) {
$textData = $s->getContentsAsText();
echo $textData;
}
}
$p = new Document();
$i = new Indexer();
$i->readAndIndex($p);
Nell’esempio Document ed Indexer sono due classi indipendenti. La classe Indexer è stata progettata per indicizzare i contenuti di qualsiasi testo. Utilizzando l’interfaccia Storable non facciamo altro che dichiarare un metodo getContentsAsText() della classe Document. Dato che la classe Indexer è impiegata solo con $textData, possiamo chiamare il metodo getContentsAsText() sull’oggetto di Document. In questo modo ogni classe che implementa il metodo getContentsAsText() può ottenere l’indicizzazione.
Per le interfacce è possibile usare anche l’ereditarietà multipla.È possibile quindi costruire una classe che implementa più interfacce: è sufficiente inserire i nomi di tutte le interfacce separate da una virgola. Ecco l’esempio, supponendo che esista un’interfaccia chiamata AltraInterfche dichiara il metodo altraFunzione().
<?php
// Definizione della classe Cerchio
class Cerchio implements Forma, AltraInterf {
public function disegna(){
// ... disegna il cerchio ...
}
public function colore($colore){
// ... imposta il colore ...
}
public function altraFunzione(){
// ... codice della funzione dichiarata in AltraInterf
}
}
?>
Da quello che abbiamo fin qui detto risulta che un’interfaccia è un particolare tipo di classe astratta, ma differisce da essa per alcune caratteristiche che qui puntualizziamo.
Differenze tra classi astratte ed interfacce
Cassi astratte
- Una classe astratta può provvedere ad alcune funzioni e lasciare il resto alle classi derivate.
- La classe derivata può o non può sovrascrivere le funzioni definite nella classe base.
- La classe figlia estesa da una classe astratta dovrebbe essere in relazione logica.
Interfacce
- Un’interfaccia non può contenere alcuna funzionalità. Contiene solo definizioni di metodi.
- Le classi derivate devono provvedere al codice per tutti i metodi definiti nell’interfaccia.
- Classi completamente differenti e non in relazione logica possono essere raggruppate insieme tramite un’interfaccia.
- Articolo precedente PHP5 ad oggetti: ereditarietà e classi
- Articolo successivo Come utilizzare gli oggetti nella programmazione di pagine PHP5