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.