Menu
Coddy logo textTech

Zusammenfassung – Payment Processor

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein vollständiges Zahlungssystem aufbauen, das alles zusammenführt, was Sie über Polymorphismus gelernt haben. Sie werden eine auf Interfaces basierende Architektur erstellen, bei der verschiedene Zahlungsmethoden über einen einzigen, einheitlichen Prozessor verarbeitet werden können – was zeigt, wie Polymorphismus Code flexibel und erweiterbar macht.

Sie werden Ihren Code über fünf Dateien organisieren:

  • PaymentMethod.php — Definieren Sie ein PaymentMethod Interface mit zwei Methodensignaturen: process(float $amount): string für die Abwicklung der Zahlung und eine statische Methode getMethodName(): string, die den Namen der Zahlungsart zurückgibt. Dieser Vertrag stellt sicher, dass jede Zahlungsmethode einheitlich verarbeitet werden kann.
  • CreditCard.php — Erstellen Sie eine CreditCard Klasse, die PaymentMethod implementiert. Binden Sie die Interface-Datei ein. Die Klasse sollte eine private Eigenschaft $lastFourDigits haben, die über den Konstruktor gesetzt wird. Implementieren Sie process() so, dass "Processing $[amount] via Credit Card ending in [lastFourDigits]" zurückgegeben wird (formatieren Sie den Betrag auf 2 Dezimalstellen). Implementieren Sie die statische Methode getMethodName() unter Verwendung von Late Static Binding, um "Credit Card" zurückzugeben.
  • PayPal.php — Erstellen Sie eine PayPal Klasse, die PaymentMethod implementiert. Binden Sie die Interface-Datei ein. Die Klasse sollte eine private Eigenschaft $email haben, die über den Konstruktor gesetzt wird. Implementieren Sie process() so, dass "Processing $[amount] via PayPal account [email]" zurückgegeben wird (formatieren Sie den Betrag auf 2 Dezimalstellen). Implementieren Sie die statische Methode getMethodName(), um "PayPal" zurückzugeben.
  • PaymentProcessor.php — Erstellen Sie eine PaymentProcessor Klasse, die die Zahlungen orchestriert. Binden Sie die Interface-Datei ein. Fügen Sie eine Methode executePayment(PaymentMethod $method, float $amount): string hinzu, die Interface Type Hinting verwendet, um jede Zahlungsmethode zu akzeptieren. Diese Methode sollte das Ergebnis des Aufrufs von process() auf der Zahlungsmethode zurückgeben. Fügen Sie eine weitere Methode describeMethod(PaymentMethod $method): string hinzu, die "Payment via: [methodName]" unter Verwendung der statischen Methode getMethodName() der übergebenen Zahlungsmethoden-Klasse zurückgibt.
  • main.php — Binden Sie alle Zahlungsklassendateien und den Prozessor ein. Erstellen Sie eine PaymentProcessor Instanz. Sie erhalten drei Eingaben: die letzten vier Ziffern einer Kreditkarte, eine PayPal-E-Mail-Adresse und einen Zahlungsbetrag. Erstellen Sie sowohl eine CreditCard als auch eine PayPal Instanz mit ihren jeweiligen Identifikatoren. Konvertieren Sie den Betrag in einen Float. Verwenden Sie den Prozessor, um zuerst eine Zahlung mit der Kreditkarte und dann mit PayPal auszuführen. Geben Sie jedes Ergebnis in einer eigenen Zeile aus. Geben Sie abschließend die Methodenbeschreibung für die PayPal-Zahlungsmethode aus.

Das Schöne an diesem Design ist, dass Ihr PaymentProcessor nichts Spezielles über Kreditkarten oder PayPal weiß – er kennt nur das PaymentMethod Interface. Sie könnten morgen eine BankTransfer oder Cryptocurrency Klasse hinzufügen, und der Prozessor würde sie ohne Änderungen verarbeiten. Das ist die Stärke des interface-basierten Polymorphismus in Kombination mit Late Static 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