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 respecter. Contrairement aux classes abstraites, qui peuvent contenir à la fois des méthodes abstraites et concrètes, une interface ne fait que déclarer des signatures de méthodes, sans aucune implémentation. Considérez-la comme une promesse : toute classe qui implémente une interface garantit qu’elle fournira ces méthodes spécifiques.

Vous définissez une interface à l’aide du 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 du fait 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 sans lien de partager un comportement commun. Une Car et une Motorcycle peuvent n’avoir aucun héritage en commun, mais toutes deux peuvent implémenter Drivable pour garantir qu’elles disposent des 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 qui l’implémentent doivent respecter.

challenge icon

Défi

Facile

Construisons un système de messagerie simple qui te présente les interfaces. Tu vas définir une interface qui établit un contrat sur la manière dont les messages doivent être traités, posant ainsi les bases des classes qui l’implémenteront et que tu créeras dans la prochaine leçon.

Tu organiseras ton code sur deux fichiers :

  • Messageable.php : définis une interface appelée Messageable qui déclare deux signatures de méthodes : compose($content) pour créer un message, et deliver() pour l’envoyer. N’oublie pas que les méthodes d’une interface n’ont pas de corps, seulement une signature se terminant par un point-virgule.
  • main.php : inclus le fichier Messageable. Pour vérifier que ton interface est correctement définie, utilise la fonction interface_exists() de PHP afin de vérifier que Messageable existe. Utilise ensuite ReflectionClass pour examiner ton interface et répertorier ses méthodes. Crée une réflexion de ton interface, récupère ses méthodes à l’aide de getMethods() (qui renvoie des objets ReflectionMethod), puis affiche le résultat de getName() de chaque méthode sur sa propre ligne.

Ta sortie doit afficher les deux noms de méthodes que ton interface déclare, chacun sur une ligne distincte, dans l’ordre dans lequel tu les as définis.

Ce défi porte uniquement sur la définition d’une interface : le contrat que les futures classes devront respecter. Tu définis les méthodes qui doivent exister, sans te préoccuper de leur fonctionnement. Cette implémentation sera abordée 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: Obtenir les méthodes en utilisant getMethods()

// TODO: Parcourir les méthodes et afficher le nom de chaque 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

Entraînez-vous par vous-même : Compilateur PHP en ligne