Menu
CoddyTech

Rangkuman: Pemroses Pembayaran

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 37 dari 91.

challenge icon

Tantangan

Mudah

Mari bangun sistem pemrosesan pembayaran lengkap yang menyatukan semua hal yang telah kamu pelajari tentang polimorfisme. Kamu akan membuat arsitektur berbasis interface, tempat berbagai cara pembayaran dapat diproses melalui satu pemroses terpadu: ini menunjukkan bagaimana polimorfisme membuat kode fleksibel dan mudah diperluas.

Kamu akan mengatur kodemu dalam lima file:

  • PaymentMethod.php: Definisikan interface PaymentMethod dengan dua signature method: process(float $amount): string untuk menangani pembayaran, dan method statis getMethodName(): string yang mengembalikan nama tipe pembayaran. Kontrak ini memastikan setiap cara pembayaran dapat diproses secara seragam.
  • CreditCard.php: Buat class CreditCard yang mengimplementasikan PaymentMethod. Sertakan file interface. Class ini harus memiliki property privat $lastFourDigits yang ditetapkan melalui constructor. Implementasikan process() agar mengembalikan "Processing $[amount] via Credit Card ending in [lastFourDigits]" (format nilai menjadi 2 angka desimal). Implementasikan getMethodName() statis menggunakan late static binding agar mengembalikan "Credit Card".
  • PayPal.php: Buat class PayPal yang mengimplementasikan PaymentMethod. Sertakan file interface. Class ini harus memiliki property privat $email yang ditetapkan melalui constructor. Implementasikan process() agar mengembalikan "Processing $[amount] via PayPal account [email]" (format nilai menjadi 2 angka desimal). Implementasikan getMethodName() statis agar mengembalikan "PayPal".
  • PaymentProcessor.php: Buat class PaymentProcessor yang mengatur pembayaran. Sertakan file interface. Tambahkan method executePayment(PaymentMethod $method, float $amount): string yang menggunakan petunjuk tipe interface agar dapat menerima cara pembayaran apa pun. Method ini harus mengembalikan hasil pemanggilan process() pada cara pembayaran tersebut. Tambahkan method lain, describeMethod(PaymentMethod $method): string, yang mengembalikan "Payment via: [methodName]" menggunakan getMethodName() statis dari class cara pembayaran yang diberikan.
  • main.php: Sertakan semua file class pembayaran dan pemrosesnya. Buat sebuah instance PaymentProcessor. Kamu akan menerima tiga input: empat digit terakhir kartu kredit, alamat email PayPal, dan jumlah pembayaran. Buat instance CreditCard dan PayPal dengan identifier masing-masing. Ubah jumlah pembayaran menjadi float. Gunakan pemroses untuk menjalankan pembayaran dengan kartu kredit terlebih dahulu, lalu dengan PayPal. Cetak setiap hasil pada barisnya sendiri. Terakhir, cetak deskripsi method untuk cara pembayaran PayPal.

Keunggulan desain ini adalah PaymentProcessor tidak perlu mengetahui apa pun tentang kartu kredit atau PayPal secara spesifik. Class ini hanya mengenal interface PaymentMethod. Besok, kamu bisa menambahkan class BankTransfer atau Cryptocurrency, dan pemroses akan menangani semuanya tanpa perubahan apa pun. Itulah kekuatan polimorfisme berbasis interface yang dipadukan dengan late static binding!

Coba sendiri

<?php
// Sertakan semua file yang diperlukan
require_once 'CreditCard.php';
require_once 'PayPal.php';
require_once 'PaymentProcessor.php';

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

// TODO: Buat instance PaymentProcessor

// TODO: Buat instance CreditCard dengan empat digit terakhir

// TODO: Buat instance PayPal dengan email

// TODO: Proses pembayaran dengan kartu kredit dan cetak hasilnya

// TODO: Proses pembayaran dengan PayPal dan cetak hasilnya

// TODO: Cetak deskripsi method untuk method pembayaran PayPal
?>

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online