Menu
Coddy logo textTech

Récapitulatif - Processeur de paiements

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

challenge icon

Défi

Facile

Construisons un système complet de traitement des paiements qui rassemble tout ce que vous avez appris sur le polymorphisme. Vous allez créer une architecture fondée sur une interface, dans laquelle différentes méthodes de paiement peuvent être traitées par l’intermédiaire d’un processeur unique et unifié : vous verrez ainsi comment le polymorphisme rend le code flexible et extensible.

Vous organiserez votre code sur cinq fichiers :

  • PaymentMethod.php : définissez une interface PaymentMethod avec deux signatures de méthodes : process(float $amount): string pour gérer le paiement, et une méthode statique getMethodName(): string qui renvoie le nom du type de paiement. Ce contrat garantit que toute méthode de paiement peut être traitée de manière uniforme.
  • CreditCard.php : créez une classe CreditCard qui implémente PaymentMethod. Incluez le fichier de l’interface. La classe doit avoir une propriété privée $lastFourDigits définie par l’intermédiaire du constructeur. Implémentez process() pour renvoyer "Processing $[amount] via Credit Card ending in [lastFourDigits]" (formatez le montant avec 2 décimales). Implémentez la méthode statique getMethodName() en utilisant la liaison statique tardive afin de renvoyer "Credit Card".
  • PayPal.php : créez une classe PayPal qui implémente PaymentMethod. Incluez le fichier de l’interface. La classe doit avoir une propriété privée $email définie par l’intermédiaire du constructeur. Implémentez process() pour renvoyer "Processing $[amount] via PayPal account [email]" (formatez le montant avec 2 décimales). Implémentez la méthode statique getMethodName() pour renvoyer "PayPal".
  • PaymentProcessor.php : créez une classe PaymentProcessor qui orchestre les paiements. Incluez le fichier de l’interface. Ajoutez une méthode executePayment(PaymentMethod $method, float $amount): string qui utilise l’indication de type de l’interface pour accepter toute méthode de paiement. Cette méthode doit renvoyer le résultat de l’appel à process() sur la méthode de paiement. Ajoutez une autre méthode describeMethod(PaymentMethod $method): string qui renvoie "Payment via: [methodName]" en utilisant la méthode statique getMethodName() de la classe de la méthode de paiement transmise.
  • main.php : incluez tous les fichiers des classes de paiement ainsi que le processeur. Créez une instance de PaymentProcessor. Vous recevrez trois entrées : les quatre derniers chiffres d’une carte bancaire, une adresse e-mail PayPal et un montant de paiement. Créez une instance de CreditCard et une instance de PayPal avec leurs identifiants respectifs. Convertissez le montant en nombre à virgule flottante. Utilisez le processeur pour exécuter d’abord un paiement avec la carte bancaire, puis avec PayPal. Affichez chaque résultat sur sa propre ligne. Enfin, affichez la description de la méthode pour la méthode de paiement PayPal.

La beauté de cette conception est que votre PaymentProcessor ne sait rien de particulier sur les cartes bancaires ou PayPal. Il ne connaît que l’interface PaymentMethod. Vous pourriez ajouter dès demain une classe BankTransfer ou Cryptocurrency, et le processeur les gérerait sans aucune modification. C’est toute la puissance du polymorphisme fondé sur les interfaces, combiné à la liaison statique tardive !

Essayez vous-même

<?php
// Inclure tous les fichiers requis
require_once 'CreditCard.php';
require_once 'PayPal.php';
require_once 'PaymentProcessor.php';

// Lire les entrées
$lastFourDigits = trim(fgets(STDIN));
$paypalEmail = trim(fgets(STDIN));
$amount = floatval(trim(fgets(STDIN)));

// TODO: Créer une instance de PaymentProcessor

// TODO: Créer une instance de CreditCard avec les quatre derniers chiffres

// TODO: Créer une instance de PayPal avec l'email

// TODO: Exécuter le paiement avec la carte de crédit et afficher le résultat

// TODO: Exécuter le paiement avec PayPal et afficher le résultat

// TODO: Afficher la description de la méthode pour la méthode de paiement PayPal
?>

Toutes les leçons de Programmation Orientée Objet

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