Menu
Coddy logo textTech

Riepilogo - Processore di pagamenti

Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 37 di 91.

challenge icon

Sfida

Facile

Costruiamo un sistema completo di elaborazione dei pagamenti che riunisce tutto ciò che hai imparato sul polimorfismo. Creerai un’architettura basata su interfacce in cui diversi metodi di pagamento possono essere elaborati tramite un unico processore unificato: dimostrando come il polimorfismo renda il codice flessibile ed estensibile.

Organizzerai il codice in cinque file:

  • PaymentMethod.php: Definisci un’interfaccia PaymentMethod con due firme di metodo: process(float $amount): string per gestire il pagamento e un metodo statico getMethodName(): string che restituisce il nome del tipo di pagamento. Questo contratto garantisce che qualsiasi metodo di pagamento possa essere elaborato in modo uniforme.
  • CreditCard.php: Crea una classe CreditCard che implementa PaymentMethod. Includi il file dell’interfaccia. La classe deve avere una proprietà privata $lastFourDigits impostata tramite il costruttore. Implementa process() in modo che restituisca "Processing $[amount] via Credit Card ending in [lastFourDigits]" (formatta l’importo con 2 cifre decimali). Implementa il metodo statico getMethodName() usando il binding statico tardivo per restituire "Credit Card".
  • PayPal.php: Crea una classe PayPal che implementa PaymentMethod. Includi il file dell’interfaccia. La classe deve avere una proprietà privata $email impostata tramite il costruttore. Implementa process() in modo che restituisca "Processing $[amount] via PayPal account [email]" (formatta l’importo con 2 cifre decimali). Implementa il metodo statico getMethodName() in modo che restituisca "PayPal".
  • PaymentProcessor.php: Crea una classe PaymentProcessor che coordina i pagamenti. Includi il file dell’interfaccia. Aggiungi un metodo executePayment(PaymentMethod $method, float $amount): string che usa il type hinting dell’interfaccia per accettare qualsiasi metodo di pagamento. Questo metodo deve restituire il risultato della chiamata a process() sul metodo di pagamento. Aggiungi un altro metodo describeMethod(PaymentMethod $method): string che restituisce "Payment via: [methodName]" usando il metodo statico getMethodName() della classe del metodo di pagamento passato.
  • main.php: Includi tutti i file delle classi di pagamento e il processore. Crea un’istanza di PaymentProcessor. Riceverai tre input: le ultime quattro cifre di una carta di credito, un indirizzo email PayPal e un importo da pagare. Crea un’istanza di CreditCard e una di PayPal con i rispettivi identificativi. Converti l’importo in un float. Usa il processore per eseguire prima un pagamento con la carta di credito e poi con PayPal. Stampa ciascun risultato su una riga separata. Infine, stampa la descrizione del metodo di pagamento PayPal.

La bellezza di questo design è che il tuo PaymentProcessor non sa nulla nello specifico delle carte di credito o di PayPal. Conosce solo l’interfaccia PaymentMethod. Domani potresti aggiungere una classe BankTransfer o Cryptocurrency, e il processore le gestirebbe senza alcuna modifica. Questa è la potenza del polimorfismo basato su interfacce combinato con il binding statico tardivo!

Provalo tu

<?php
// Includi tutti i file necessari
require_once 'CreditCard.php';
require_once 'PayPal.php';
require_once 'PaymentProcessor.php';

// Leggi gli input
$lastFourDigits = trim(fgets(STDIN));
$paypalEmail = trim(fgets(STDIN));
$amount = floatval(trim(fgets(STDIN)));

// TODO: Crea un'istanza di PaymentProcessor

// TODO: Crea un'istanza di CreditCard con le ultime quattro cifre

// TODO: Crea un'istanza di PayPal con l'indirizzo email

// TODO: Esegui il pagamento con carta di credito e stampa il risultato

// TODO: Esegui il pagamento con PayPal e stampa il risultato

// TODO: Stampa la descrizione del metodo di pagamento PayPal
?>

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore PHP online