Retour au cours

Interfaces et Polymorphisme

PHP : Le Bootcamp Complet du Débutant à l'Expert (0 à Héros)

40. Interfaces et Polymorphisme

Les interfaces offrent un autre moyen puissant d'imposer une structure. Elles définissent un contrat : toute classe implémentant une interface doit implémenter toutes les méthodes listées dans cette interface.

Définition d'une Interface

  • Définie à l'aide du mot-clé interface.
  • Toutes les méthodes d'une interface doivent être publiques.
  • Les interfaces ne contiennent que des signatures de méthodes, pas de logique ni de propriétés (sauf les constantes).

php

<?php interface PaymentGateway { public function processPayment($amount); public function refundTransaction($id); // Aucun corps de méthode autorisé ! } ?>

Implémentation d'une Interface

Une classe utilise le mot-clé implements pour adopter une interface. Si elle ne parvient pas à implémenter toutes les méthodes requises, cela entraîne une erreur fatale.

php

<?php class StripeGateway implements PaymentGateway { public function processPayment($amount) { // Logique spécifique à Stripe... echo "Stripe traite $amount dollars."; } public function refundTransaction($id) { // Logique spécifique à Stripe... echo "Stripe rembourse la transaction $id."; } } class PayPalGateway implements PaymentGateway { public function processPayment($amount) { // Logique spécifique à PayPal... echo "PayPal traite $amount dollars."; } public function refundTransaction($id) { // Logique spécifique à PayPal... echo "PayPal rembourse la transaction $id."; } } ?>

Le Polymorphisme en Action

Puisque les deux classes implémentent la même interface, nous pouvons les utiliser de manière interchangeable, en nous appuyant sur les signatures de méthodes communes (processPayment). C'est le polymorphisme.

php

<?php function handleTransaction(PaymentGateway $gateway, $amount) { // Nous nous moquons DE SAVOIR si c'est Stripe ou PayPal, seulement qu'il possède la méthode. $gateway->processPayment($amount); } handleTransaction(new StripeGateway(), 500); handleTransaction(new PayPalGateway(), 250); ?>