Menu
Coddy logo textTech

Rückblick – Zahlungsabwickler

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 37 von 91.

challenge icon

Aufgabe

Einfach

Erstellen wir ein vollständiges Zahlungsabwicklungssystem, das alles zusammenführt, was du über Polymorphie gelernt hast. Du erstellst eine schnittstellenbasierte Architektur, in der verschiedene Zahlungsmethoden über einen einzigen, einheitlichen Prozessor verarbeitet werden können: So wird gezeigt, wie Polymorphie Code flexibel und erweiterbar macht.

Du organisierst deinen Code über fünf Dateien:

  • PaymentMethod.php: Definiere ein PaymentMethod-Interface mit zwei Methodensignaturen: process(float $amount): string zur Verarbeitung der Zahlung und eine statische Methode getMethodName(): string, die den Namen des Zahlungstyps zurückgibt. Dieser Vertrag stellt sicher, dass jede Zahlungsmethode einheitlich verarbeitet werden kann.
  • CreditCard.php: Erstelle eine CreditCard-Klasse, die PaymentMethod implementiert. Binde die Interface-Datei ein. Die Klasse soll eine private Eigenschaft $lastFourDigits besitzen, die über den Konstruktor gesetzt wird. Implementiere process() so, dass "Processing $[amount] via Credit Card ending in [lastFourDigits]" zurückgegeben wird (formatiere den Betrag mit 2 Dezimalstellen). Implementiere die statische Methode getMethodName() mithilfe des späten statischen Bindings, sodass "Credit Card" zurückgegeben wird.
  • PayPal.php: Erstelle eine PayPal-Klasse, die PaymentMethod implementiert. Binde die Interface-Datei ein. Die Klasse soll eine private Eigenschaft $email besitzen, die über den Konstruktor gesetzt wird. Implementiere process() so, dass "Processing $[amount] via PayPal account [email]" zurückgegeben wird (formatiere den Betrag mit 2 Dezimalstellen). Implementiere die statische Methode getMethodName() so, dass "PayPal" zurückgegeben wird.
  • PaymentProcessor.php: Erstelle eine PaymentProcessor-Klasse, die Zahlungen koordiniert. Binde die Interface-Datei ein. Füge eine Methode executePayment(PaymentMethod $method, float $amount): string hinzu, die mithilfe einer Typdeklaration des Interfaces jede Zahlungsmethode akzeptiert. Diese Methode soll das Ergebnis des Aufrufs von process() für die Zahlungsmethode zurückgeben. Füge außerdem eine Methode describeMethod(PaymentMethod $method): string hinzu, die mithilfe der statischen Methode getMethodName() aus der Klasse der übergebenen Zahlungsmethode "Payment via: [methodName]" zurückgibt.
  • main.php: Binde alle Dateien der Zahlungsklassen und den Prozessor ein. Erstelle eine PaymentProcessor-Instanz. Du erhältst drei Eingaben: die letzten vier Ziffern einer Kreditkarte, eine PayPal-E-Mail-Adresse und einen Zahlungsbetrag. Erstelle sowohl eine CreditCard- als auch eine PayPal-Instanz mit ihren jeweiligen Bezeichnern. Konvertiere den Betrag in einen Float. Verwende den Prozessor, um zuerst eine Zahlung mit der Kreditkarte und anschließend mit PayPal auszuführen. Gib jedes Ergebnis in einer eigenen Zeile aus. Gib schließlich die Methodenbeschreibung für die PayPal-Zahlungsmethode aus.

Das Schöne an diesem Design ist, dass dein PaymentProcessor nichts über Kreditkarten oder PayPal im Besonderen wissen muss. Er kennt nur das PaymentMethod-Interface. Du könntest morgen eine BankTransfer- oder Cryptocurrency-Klasse hinzufügen, und der Prozessor würde sie ohne Änderungen verarbeiten. Das ist die Stärke der schnittstellenbasierten Polymorphie in Verbindung mit spätem statischem Binding!

Probier es selbst

<?php
// Alle erforderlichen Dateien einbinden
require_once 'CreditCard.php';
require_once 'PayPal.php';
require_once 'PaymentProcessor.php';

// Eingaben lesen
$lastFourDigits = trim(fgets(STDIN));
$paypalEmail = trim(fgets(STDIN));
$amount = floatval(trim(fgets(STDIN)));

// TODO: Eine PaymentProcessor-Instanz erstellen

// TODO: Eine CreditCard-Instanz mit den letzten vier Ziffern erstellen

// TODO: Eine PayPal-Instanz mit der E-Mail erstellen

// TODO: Zahlung mit Kreditkarte ausführen und das Ergebnis ausgeben

// TODO: Zahlung mit PayPal ausführen und das Ergebnis ausgeben

// TODO: Die Methodenbeschreibung für die PayPal-Zahlungsmethode ausgeben
?>

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-PHP-Compiler