Menu
Coddy logo textTech

Implémentation des interfaces

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 28 sur 91.

Maintenant que tu comprends ce que sont les interfaces, voyons comment les implémenter concrètement. Une classe implémente une interface à l’aide du mot-clé implements et doit fournir des implémentations concrètes pour toutes les méthodes déclarées dans cette interface.

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

class Document implements Printable {
    private $content;
    
    public function __construct($content) {
        $this->content = $content;
    }
    
    public function print() {
        return "Printing: " . $this->content;
    }
}

$doc = new Document("Hello World");
echo $doc->print();

Sortie :

Printing: Hello World

La classe Document implémente Printable en fournissant sa propre version de la méthode print(). Si tu oublies d’implémenter une méthode requise, PHP générera une erreur fatale.

Différentes classes peuvent implémenter la même interface à leur manière :

<?php
class Invoice implements Printable {
    private $amount;
    
    public function __construct($amount) {
        $this->amount = $amount;
    }
    
    public function print() {
        return "Invoice Total: $" . $this->amount;
    }
}

$invoice = new Invoice(150);
echo $invoice->print();

Sortie :

Invoice Total: $150

À la fois Document et Invoice respectent le contrat Printable, mais chacun gère l’impression différemment selon son objectif.

Point clé : Utilisez implements pour relier une classe à une interface, puis définissez toutes les méthodes requises. Chaque classe qui implémente l’interface fournit sa propre logique tout en garantissant l’existence des mêmes signatures de méthodes.

challenge icon

Défi

Facile

Construisons un système de messagerie qui montre comment différentes classes peuvent implémenter la même interface de manière unique.

Tu vas créer trois fichiers qui fonctionnent ensemble pour gérer différents types de messages :

  • Messageable.php : définis l’interface Messageable avec deux signatures de méthodes : compose($content) et deliver(). Cette interface établit le contrat que tous les types de messages doivent respecter.
  • Email.php : crée une classe Email qui implémente Messageable. Inclus le fichier de l’interface en haut du fichier. La classe doit avoir une propriété privée $recipient et une propriété privée $body. Le constructeur accepte l’adresse du destinataire. Implémente compose($content) pour stocker le contenu dans $body et retourner "Email composed". Implémente deliver() pour retourner "Email to [recipient]: [body]".
  • SMS.php : crée une classe SMS qui implémente également Messageable. Inclus le fichier de l’interface en haut du fichier. La classe doit avoir une propriété privée $phoneNumber et une propriété privée $text. Le constructeur accepte le numéro de téléphone. Implémente compose($content) pour stocker le contenu dans $text et retourner "SMS composed". Implémente deliver() pour retourner "SMS to [phoneNumber]: [text]".

Dans main.php, inclus les fichiers Email et SMS. Tu recevras trois entrées : une adresse e-mail, un numéro de téléphone et le contenu d’un message. Crée un objet Email avec l’adresse e-mail et un objet SMS avec le numéro de téléphone. Appelle compose() avec le contenu du message sur les deux objets, en affichant chaque résultat sur sa propre ligne. Appelle ensuite deliver() sur les deux objets, en affichant chaque résultat sur sa propre ligne. L’ordre doit être le suivant : composition de l’e-mail, composition du SMS, envoi de l’e-mail, envoi du SMS.

Les deux classes respectent le même contrat Messageable, mais chacune gère la composition et l’envoi des messages selon son propre objectif : les e-mails affichent l’adresse du destinataire, tandis que les messages SMS affichent le numéro de téléphone.

Essayez vous-même

<?php
require_once 'Email.php';
require_once 'SMS.php';

// Lire les entrées
$emailAddress = trim(fgets(STDIN));
$phoneNumber = trim(fgets(STDIN));
$messageContent = trim(fgets(STDIN));

// TODO: Créer un objet Email avec l'adresse e-mail

// TODO: Créer un objet SMS avec le numéro de téléphone

// TODO: Appeler compose() sur les deux objets et afficher les résultats
// Order: email compose, then SMS compose

// TODO: Appeler deliver() sur les deux objets et afficher les résultats
// Ordre : email deliver, puis SMS deliver
?>
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