In PHP, le classi astratte e le interfacce sono due costrutti di programmazione che consentono di definire il comportamento che le classi concrete devono implementare. Tuttavia, esistono differenze significative tra i due.
Una classe astratta è una classe che non può essere istanziata direttamente. Può contenere sia metodi definiti (con implementazione) che metodi astratti (senza implementazione). I metodi astratti dichiarano solo la firma del metodo e devono essere implementati dalle sottoclassi concrete. Le classi astratte sono utili quando si vuole fornire una base comune con qualche comportamento predefinito che le sottoclassi possono condividere.
class Auto extends Veicolo {
// Implementazione del metodo astratto
public function muovi() {
echo “L’auto si sta muovendo.”;
}
}
$auto = new Auto();
$auto->avviaMotore(); // Output: Il motore è avviato.
$auto->muovi(); // Output: L’auto si sta muovendo.
```
Un’interfaccia, d’altra parte, è una collezione di metodi che devono essere implementati in una classe. L’interfaccia non può avere alcun metodo con implementazione; tutti i metodi sono implicitamente astratti. Le classi possono implementare più interfacce, permettendo così un certo grado di “polimorfismo multiplo.”
interface Avviabile {
public function avviaMotore();
}
class Bicicletta implements Movibile, Avviabile { public function muovi() { echo “La bicicletta si sta muovendo.”; }
public function avviaMotore() { echo “La bicicletta non ha un motore.”; } }$bicicletta = new Bicicletta();
$bicicletta->avviaMotore(); // Output: La bicicletta non ha un motore.
$bicicletta->muovi(); // Output: La bicicletta si sta muovendo.
```
1. Istanziazione:
- Classe Astratta: Non può essere istanziata direttamente.
- Interfaccia: Non può essere istanziata direttamente.
1. Metodi:
- Classe Astratta: Può contenere sia metodi concreti che astratti.
- Interfaccia: Può contenere solo metodi astratti.
1. Ereditarietà Multipla:
- Classe Astratta: Una classe può estendere solo una classe astratta.
- Interfaccia: Una classe può implementare più interfacce.
1. Costanti:
- Classe Astratta: Può avere costanti.
- Interfaccia: Può avere solo costanti.
- Classe Astratta: Utilizza una classe astratta quando desideri fornire funzionalità concrete che altre classi possono condividere e estendere. Ad esempio, se hai una serie di classi che devono condividere alcune proprietà o metodi di base.
- Interfaccia: Utilizza un’interfaccia quando desideri definire un insieme di metodi che devono essere implementati da più classi diverse, senza imporre una specifica gerarchia di ereditarietà.
- [PHP Manual: Abstract Classes](https://www.php.net/manual/en/language.oop5.abstract.php)
- [PHP Manual: Interfaces](https://www.php.net/manual/en/language.oop5.interfaces.php)
- [W3Schools PHP OOP Abstract Classes & Methods](https://www.w3schools.com/php/php_oop_abstract.asp)
- [W3Schools PHP OOP Interfaces](https://www.w3schools.com/php/php_oop_interfaces.asp)
Queste risorse offrono una panoramica completa su come e quando utilizzare classi astratte e interfacce in PHP, fornendo anche ulteriori esempi pratici e dettagli tecnici.