Skip to content

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 moving

Explication

  • L’interface Movable déclare la méthode move().
  • Car implémente Movable et fournit son comportement.
  • Toute classe qui implémente une interface doit définir toutes ses méthodes.

Différences avec les classes abstraites

CaractéristiqueInterfaceClasse 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.