Menu
Coddy logo textTech

Introduction aux Interfaces

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 27 sur 91.

Une interface définit un contrat que les classes doivent suivre. Contrairement aux classes abstraites qui peuvent contenir à la fois des méthodes abstraites et concrètes, une interface déclare uniquement des signatures de méthode sans aucune implémentation. Considérez cela comme une promesse : toute classe qui implémente une interface garantit qu'elle fournira ces méthodes spécifiques.

Vous définissez une interface en utilisant le mot-clé interface :

<?php
interface Printable {
    public function print();
}

Cette interface déclare que toute classe implémentant Printable doit avoir une méthode print(). L'interface ne se soucie pas de la manière dont la méthode fonctionne, seulement qu'elle existe.

Voici un exemple simple montrant la structure de base :

<?php
interface Drivable {
    public function start();
    public function stop();
}

Notez que les méthodes d'interface n'ont pas de corps, seulement la signature se terminant par un point-virgule. Toutes les méthodes d'une interface sont implicitement publiques, vous ne pouvez donc pas utiliser private ou protected.

Les interfaces sont puissantes car elles permettent à des classes non liées de partager un comportement commun. Une Car et une Motorcycle n'ont peut-être rien en commun en termes d'héritage, mais toutes deux peuvent implémenter Drivable pour garantir qu'elles possèdent les méthodes start() et stop().

Point clé : Une interface définit les méthodes qu'une classe doit posséder, et non la manière dont elles doivent fonctionner. Elle établit un contrat que les classes d'implémentation doivent respecter.

challenge icon

Défi

Facile

Construisons un système de messagerie simple qui vous fera découvrir les interfaces. Vous allez définir une interface qui établit un contrat sur la manière dont les messages doivent être gérés, posant ainsi les bases des classes d'implémentation que vous créerez dans la prochaine leçon.

Vous organiserez votre code sur deux fichiers :

  • Messageable.php — Définissez une interface nommée Messageable qui déclare deux signatures de méthodes : compose($content) pour créer un message, et deliver() pour l'envoyer. Rappelez-vous, les méthodes d'interface n'ont pas de corps — seulement la signature se terminant par un point-virgule.
  • main.php — Incluez le fichier Messageable. Pour vérifier que votre interface est correctement définie, utilisez la fonction PHP interface_exists() pour vérifier si Messageable existe. Utilisez ensuite la classe ReflectionClass pour inspecter votre interface et lister ses méthodes. Créez une réflexion de votre interface, récupérez ses méthodes à l'aide de getMethods() (qui renvoie des objets ReflectionMethod), et affichez le getName() de chaque méthode sur sa propre ligne.

Votre sortie devrait afficher les deux noms de méthodes que votre interface déclare, chacun sur une ligne séparée, dans l'ordre où vous les avez définis.

Ce défi se concentre uniquement sur la définition d'une interface — le contrat que les futures classes devront remplir. Vous établissez quelles méthodes doivent exister, sans vous soucier de leur fonctionnement. Cette implémentation viendra dans la prochaine leçon !

Essayez vous-même

<?php
// Inclure le fichier de l'interface Messageable
require_once 'Messageable.php';

// TODO: Utiliser interface_exists() pour vérifier si l'interface Messageable existe

// TODO: Créer un objet ReflectionClass pour l'interface Messageable

// TODO: Récupérer les méthodes en utilisant getMethods()

// TODO: Parcourir les méthodes et afficher chaque nom de méthode sur sa propre ligne

?>
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet