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.
Défi
FacileConstruisons 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éeMessageablequi déclare deux signatures de méthodes :compose($content)pour créer un message, etdeliver()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 fonctioninterface_exists()de PHP afin de vérifier queMessageableexiste. Utilise ensuiteReflectionClasspour 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 degetMethods()(qui renvoie des objetsReflectionMethod), puis affiche le résultat degetName()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
?>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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition des méthodesLe mot-clé finalClasses abstraitesRécapitulatif – Hiérarchie des employés7Encapsulation
Public, Protected, PrivateModificateurs d’accès en profondeurAccesseurs et mutateursDissimulation de l’informationPromotion des constructeurs (8.0)Récapitulatif – Système de fiches étudiant10Concepts avancés de la POO
Composition ou héritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibres (PHP 8.1)Approfondissement du clonage d’objetsGénérateurs et itérateurs13Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron Dépôt2Espaces de noms et chargement automatique
Introduction aux espaces de nomsLe mot-clé useNorme de chargement automatique PSR-4Autoloader de ComposerRécapitulatif - Projet organisé5Interfaces et contrats
Introduction aux interfacesImplémentation des interfacesImplémentation de plusieurs interfacesInterface ou classe abstraiteIndication de type avec les interfacesRécapitulatif - Calculateur de formes8Méthodes magiques
Introduction aux méthodes magiques__toString et __debugInfo__get, __set, __isset, __unset__call et __callStatic__clone et clonage d’objets__serialize et __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d’instance vs statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés en lecture seule (PHP 8.1)Récapitulatif - Gestionnaire de comptes bancaires6Polymorphisme
Révision de la redéfinition des méthodesPolymorphisme via les interfacesAnnotations de type et types unionLiaison statique tardiveRécapitulatif - Processeur de paiements9Traits
Introduction aux traitsUtilisation de plusieurs traitsRésolution des conflits entre traitsMéthodes abstraites dans les traitsTraits par rapport à l’héritage12Patrons de conception – Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur PHP en ligne