Interfaces
Objectifs pédagogiques
- Comprendre le rôle d'une interface.
- Définir une interface et l'implémenter dans une ou plusieurs classes.
- Différencier interface et classe abstraite.
Définition
Une interface définit un contrat que les classes doivent respecter. Elle ne contient que des signatures de méthodes, sans implémentation.
Les classes qui implémentent une interface s’engagent à définir toutes les méthodes déclarées.
Exemple
php
<?php
interface Movable {
public function move(): string;
}
class Car implements Movable {
public function move(): string {
return "The car is moving";
}
}
$car = new Car();
echo $car->move(); // The car is movingExplication
- L’interface
Movabledéclare la méthodemove(). CarimplémenteMovableet fournit son comportement.- Toute classe qui implémente une interface doit définir toutes ses méthodes.
Différences avec les classes abstraites
| Caractéristique | Interface | Classe abstraite |
|---|---|---|
| Peut contenir des attributs | ❌ Non | ✅ Oui |
| Peut contenir des méthodes avec corps | ❌ Non | ✅ Oui |
| Peut être multiple | ✅ Oui | ❌ Non |
| Constructeur autorisé | ❌ Non | ✅ Oui |
| Object instanciable | ❌ Non | ❌ Non |
Interface multiple
Une classe peut implémenter plusieurs interfaces :
php
<?php
interface Movable {
public function move(): string;
}
interface Honkable {
public function honk(): string;
}
class Car implements Movable, Honkable {
public function move(): string {
return "Moving forward";
}
public function honk(): string {
return "Beep beep";
}
}Utilisation pratique
Les interfaces sont souvent utilisées pour :
- créer des comportements transverses (log, save, validate…),
- favoriser la programmation orientée contrat,
- permettre une architecture souple et extensible.
Bonnes pratiques
- Donner un nom explicite à l’interface (
Loggable,Renderable,Authenticable, etc.). - Utiliser les interfaces pour décrire des capacités.
- Une interface = un rôle.
- Préférer des interfaces fines (avec peu de méthodes) plutôt qu’une interface massive.
Conclusion
Les interfaces permettent de définir des comportements obligatoires sans imposer d’héritage. Elles favorisent un code modulaire, flexible, et facilement testable.