Zusammenfassung – Payment Processor
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 37 von 91.
Aufgabe
EinfachLassen 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 einPaymentMethodInterface mit zwei Methodensignaturen:process(float $amount): stringfür die Abwicklung der Zahlung und eine statische MethodegetMethodName(): string, die den Namen der Zahlungsart zurückgibt. Dieser Vertrag stellt sicher, dass jede Zahlungsmethode einheitlich verarbeitet werden kann.CreditCard.php— Erstellen Sie eineCreditCardKlasse, diePaymentMethodimplementiert. Binden Sie die Interface-Datei ein. Die Klasse sollte eine private Eigenschaft$lastFourDigitshaben, die über den Konstruktor gesetzt wird. Implementieren Sieprocess()so, dass"Processing $[amount] via Credit Card ending in [lastFourDigits]"zurückgegeben wird (formatieren Sie den Betrag auf 2 Dezimalstellen). Implementieren Sie die statische MethodegetMethodName()unter Verwendung von Late Static Binding, um"Credit Card"zurückzugeben.PayPal.php— Erstellen Sie einePayPalKlasse, diePaymentMethodimplementiert. Binden Sie die Interface-Datei ein. Die Klasse sollte eine private Eigenschaft$emailhaben, die über den Konstruktor gesetzt wird. Implementieren Sieprocess()so, dass"Processing $[amount] via PayPal account [email]"zurückgegeben wird (formatieren Sie den Betrag auf 2 Dezimalstellen). Implementieren Sie die statische MethodegetMethodName(), um"PayPal"zurückzugeben.PaymentProcessor.php— Erstellen Sie einePaymentProcessorKlasse, die die Zahlungen orchestriert. Binden Sie die Interface-Datei ein. Fügen Sie eine MethodeexecutePayment(PaymentMethod $method, float $amount): stringhinzu, die Interface Type Hinting verwendet, um jede Zahlungsmethode zu akzeptieren. Diese Methode sollte das Ergebnis des Aufrufs vonprocess()auf der Zahlungsmethode zurückgeben. Fügen Sie eine weitere MethodedescribeMethod(PaymentMethod $method): stringhinzu, die"Payment via: [methodName]"unter Verwendung der statischen MethodegetMethodName()der übergebenen Zahlungsmethoden-Klasse zurückgibt.main.php— Binden Sie alle Zahlungsklassendateien und den Prozessor ein. Erstellen Sie einePaymentProcessorInstanz. Sie erhalten drei Eingaben: die letzten vier Ziffern einer Kreditkarte, eine PayPal-E-Mail-Adresse und einen Zahlungsbetrag. Erstellen Sie sowohl eineCreditCardals auch einePayPalInstanz 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
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung