Menu
Coddy logo textTech

Podsumowanie — procesor płatności

Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 37 z 91.

challenge icon

Wyzwanie

Łatwy

Zbudujmy kompletny system przetwarzania płatności, który łączy wszystko, czego nauczyłeś się o polimorfizmie. Stworzysz architekturę opartą na interfejsie, w której różne metody płatności można obsługiwać za pomocą jednego, ujednoliconego procesora — pokażemy, jak polimorfizm sprawia, że kod jest elastyczny i łatwy do rozszerzania.

Uporządkujesz kod w pięciu plikach:

  • PaymentMethod.php: Zdefiniuj interfejs PaymentMethod z dwoma sygnaturami metod: process(float $amount): string do obsługi płatności oraz metodą statyczną getMethodName(): string, która zwraca nazwę typu płatności. Ten kontrakt gwarantuje, że każdą metodę płatności można obsługiwać w jednolity sposób.
  • CreditCard.php: Utwórz klasę CreditCard, która implementuje PaymentMethod. Dołącz plik interfejsu. Klasa powinna mieć prywatną właściwość $lastFourDigits, ustawianą przez konstruktor. Zaimplementuj process(), aby zwracała "Processing $[amount] via Credit Card ending in [lastFourDigits]" (sformatuj kwotę do 2 miejsc po przecinku). Zaimplementuj statyczną metodę getMethodName(), używając późnego wiązania statycznego, aby zwracała "Credit Card".
  • PayPal.php: Utwórz klasę PayPal, która implementuje PaymentMethod. Dołącz plik interfejsu. Klasa powinna mieć prywatną właściwość $email, ustawianą przez konstruktor. Zaimplementuj process(), aby zwracała "Processing $[amount] via PayPal account [email]" (sformatuj kwotę do 2 miejsc po przecinku). Zaimplementuj statyczną metodę getMethodName(), aby zwracała "PayPal".
  • PaymentProcessor.php: Utwórz klasę PaymentProcessor, która koordynuje płatności. Dołącz plik interfejsu. Dodaj metodę executePayment(PaymentMethod $method, float $amount): string, która używa wskazówki typu interfejsu, aby akceptować dowolną metodę płatności. Ta metoda powinna zwracać wynik wywołania process() dla metody płatności. Dodaj kolejną metodę describeMethod(PaymentMethod $method): string, która zwraca "Payment via: [methodName]", używając statycznej metody getMethodName() z klasy przekazanej metody płatności.
  • main.php: Dołącz wszystkie pliki klas płatności oraz plik procesora. Utwórz instancję PaymentProcessor. Otrzymasz trzy dane wejściowe: ostatnie cztery cyfry karty kredytowej, adres e-mail PayPal i kwotę płatności. Utwórz instancje CreditCard i PayPal, przekazując im odpowiednie identyfikatory. Przekonwertuj kwotę na liczbę zmiennoprzecinkową. Użyj procesora, aby najpierw zrealizować płatność kartą kredytową, a następnie przez PayPal. Wypisz każdy wynik w osobnym wierszu. Na koniec wypisz opis metody płatności PayPal.

Piękno tego projektu polega na tym, że PaymentProcessor nie wie nic konkretnego o kartach kredytowych ani PayPal. Zna tylko interfejs PaymentMethod. Jutro możesz dodać klasę BankTransfer lub Cryptocurrency, a procesor będzie je obsługiwać bez żadnych modyfikacji. Na tym polega siła polimorfizmu opartego na interfejsach w połączeniu z późnym wiązaniem statycznym!

Spróbuj swoich sił

<?php
// Dołącz wszystkie wymagane pliki
require_once 'CreditCard.php';
require_once 'PayPal.php';
require_once 'PaymentProcessor.php';

// Odczytaj dane wejściowe
$lastFourDigits = trim(fgets(STDIN));
$paypalEmail = trim(fgets(STDIN));
$amount = floatval(trim(fgets(STDIN)));

// TODO: Utwórz instancję PaymentProcessor

// TODO: Utwórz instancję CreditCard z ostatnimi czterema cyframi

// TODO: Utwórz instancję PayPal z adresem e-mail

// TODO: Wykonaj płatność kartą kredytową i wypisz wynik

// TODO: Wykonaj płatność przez PayPal i wypisz wynik

// TODO: Wypisz opis metody płatności PayPal
?>

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online