Menu
Coddy logo textTech

Récapitulatif - Processeur de paiement

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 basée sur une interface où différentes méthodes de paiement peuvent être traitées via un processeur unique et unifié — démontrant 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éthode : process(float $amount): string pour gérer le paiement, et une méthode statique getMethodName(): string qui retourne 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 via le constructeur. Implémentez process() pour retourner "Processing $[amount] via Credit Card ending in [lastFourDigits]" (formatez le montant à 2 décimales). Implémentez la méthode statique getMethodName() en utilisant le late static binding pour retourner "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 via le constructeur. Implémentez process() pour retourner "Processing $[amount] via PayPal account [email]" (formatez le montant à 2 décimales). Implémentez la méthode statique getMethodName() pour retourner "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 le typage d'interface (type hinting) pour accepter n'importe quelle méthode de paiement. Cette méthode doit retourner le résultat de l'appel à process() sur la méthode de paiement. Ajoutez une autre méthode describeMethod(PaymentMethod $method): string qui retourne "Payment via: [methodName]" en utilisant la méthode statique getMethodName() de la classe de la méthode de paiement passée.
  • main.php — Incluez tous les fichiers de classe de paiement et le processeur. Créez une instance de PaymentProcessor. Vous recevrez trois entrées : les quatre derniers chiffres d'une carte de crédit, 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 float. Utilisez le processeur pour exécuter un paiement avec la carte de crédit d'abord, 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 connaît rien spécifiquement des cartes de crédit ou de PayPal — il ne connaît que l'interface PaymentMethod. Vous pourriez ajouter une classe BankTransfer ou Cryptocurrency demain, et le processeur les gérerait sans aucune modification. C'est toute la puissance du polymorphisme basé sur les interfaces combiné au late static binding !

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'e-mail

// 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 le mode de paiement PayPal
?>

Toutes les leçons de Programmation Orientée Objet