Home
Home
Tutorials
   PHP
   Java
   Tutti...
Manuali
SmartImage
Marketing
Downloads
Contatti
Affiliati

  Da vedere
Hosting
Statistiche per siti
Corsi per webmaster
Hardware
Processori


  OnFocus
PHP 5 ad oggetti: il modificatore "static"

Contatore di visite senza database

PHP 5 ad oggetti: overriding e keyword final

  Siti Amici
Miki News
Giochi gratis
Areagratis
Baratto Online
AI Machines
Guide e Manuali Gratis
e-DAI.org
Siena Turismo
Italia Punto Net
Appunti universitari
devreference.org
MacMyth
Add to Technorati Favorites

Tutti i siti amici
Diventa Affiliato

 


Autore: Claudio Venturini
Categoria: php
Livello: base Livello base

PHP 5 ad oggetti: classi astratte e interfacce

Come creare, estendere e implementare classi astratte e interfacce

Sia le classi astratte che le interfacce sono particolari classi in cui è possibile non implementare alcuni metodi, ma soltanto dichiararli. Ma entriamo nei dettagli.

Le classi astratte: abstract

Una classe astratta è una classe in cui uno o più metodi non vengono implementati. Per questo motivo non si possono creare oggetti della classe. La classe funziona quindi come "scheletro" per creare sottoclassi. Per poter istanziare oggetti delle sottoclassi esse devono implementare i metodi astratti ereditati. Altrimenti diventano a loro volta classi astratte.

Per creare una classe astratta è sufficiente usare la keyword abstract nella dichiarazione della classe, e in tutti i metodi. Ecco l'esempio.

<?php

// Definizione della classe Forma
abstract class Forma {
  
  
// Disegna la forma (dipende dalla forma -> abstract)
  public abstract function disegna();

}

// Definizione della classe Rettangolo
class Rettangolo extends Forma {

  public function disegna(){
    // ... disegna il rettangolo ...
  }

}

// Definizione della classe Cerchio
class Cerchio extends Forma {

  public function disegna(){
    // ... disegna il cerchio ...
  }

}

// Costruisco una Forma, un Rettangolo e un Cerchio
$f = new Forma(); // Errore! Forma č abstract
$r = new Rettangolo();
$c = new Cerchio();
$r->disegna(); // Disegna il rettangolo
$c->disegna(); // Disegna il cerchio

?> 

Per usi avanzati delle classi astratte consiglio di guardare guide specifiche della programmazione ad oggetti, in quanto lo scopo dell'articolo è spiegare solo la sintassi delle classi astratte in PHP.

Interfacce

Le interfacce possono essere viste come classi astratte in cui però tutti i metodi sono astratti. Inoltre non è poossibile specificare attributi. Definiscono quindi una serie di metodi che le classi dovranno implementare. In questo caso le classi che implementano l'interfaccia non sono sottoclassi, in quanto un'interfaccia non è propriamente una classe. La sintassi è quindi diversa.

Un'interfaccia si dichiara con la parola chiave interface, al posto di class. Le classi che implementano l'interfaccia devono aggiungere implements NomeInterfaccia nella dichiarazione della classe.
Come al solito ecco l'esempio.

<?php

// Definizione dell'interfaccia Forma
interface Forma {
  
  
// Disegna la forma
  function disegna();

  // Cambia il colore
  function colore($colore);

}

// Definizione della classe Rettangolo
class Rettangolo implements Forma {

  public function disegna(){
    // ... disegna il rettangolo ...
  }

}

// Definizione della classe Cerchio
class Cerchio implements Forma {

  public function disegna(){
    // ... disegna il cerchio ...
  }

  public function colore($colore){
    // ... imposta il colore ...
  }

}

// Costruisco una Forma, un Rettangolo e un Cerchio
$f = new Forma(); // Errore! Forma č un interfaccia
$c = new Cerchio(); // Ok
$c->disegna(); // Disegna il cerchio
$c->colore("verde"); // Imposta il colore

?> 

Nell'esempio la classe Rettangolo non implementa colore(). Viene quindi generato un fatal error. E' quindi chiaro che se una classe implementa un'interfaccia, allora deve implementare tutti i metodi dell'interfaccia. In alternativa può implementarne solo alcuni, ma deve però essere dichiarata abstract.

Per le interfacce è possibile usare anche l'ereditarietà multipla. E' 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 AltraInterf che dichiara il metodo altraFunzione().

<?php

// Definizione della classe Cerchio
class Cerchio implements FormaAltraInterf {

  public function disegna(){
    // ... disegna il cerchio ...
  }

  public function colore($colore){
    // ... imposta il colore ...
  }

  public function altraFunzione(){
    // ... codice della funzione dichiarata in AltraInterf
  }

}

?>
Le variabili in PHP, errori comuni Precedente Indice Successivo Aggiungere motori di ricerca italiani a Mint
Le variabili in PHP, errori comuni Aggiungere motori di ricerca italiani a Mint