Rangkuman: Pemroses Pembayaran
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 37 dari 91.
Tantangan
MudahMari 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 interfacePaymentMethoddengan dua signature method:process(float $amount): stringuntuk menangani pembayaran, dan method statisgetMethodName(): stringyang mengembalikan nama tipe pembayaran. Kontrak ini memastikan setiap cara pembayaran dapat diproses secara seragam.CreditCard.php: Buat classCreditCardyang mengimplementasikanPaymentMethod. Sertakan file interface. Class ini harus memiliki property privat$lastFourDigitsyang ditetapkan melalui constructor. Implementasikanprocess()agar mengembalikan"Processing $[amount] via Credit Card ending in [lastFourDigits]"(format nilai menjadi 2 angka desimal). ImplementasikangetMethodName()statis menggunakan late static binding agar mengembalikan"Credit Card".PayPal.php: Buat classPayPalyang mengimplementasikanPaymentMethod. Sertakan file interface. Class ini harus memiliki property privat$emailyang ditetapkan melalui constructor. Implementasikanprocess()agar mengembalikan"Processing $[amount] via PayPal account [email]"(format nilai menjadi 2 angka desimal). ImplementasikangetMethodName()statis agar mengembalikan"PayPal".PaymentProcessor.php: Buat classPaymentProcessoryang mengatur pembayaran. Sertakan file interface. Tambahkan methodexecutePayment(PaymentMethod $method, float $amount): stringyang menggunakan petunjuk tipe interface agar dapat menerima cara pembayaran apa pun. Method ini harus mengembalikan hasil pemanggilanprocess()pada cara pembayaran tersebut. Tambahkan method lain,describeMethod(PaymentMethod $method): string, yang mengembalikan"Payment via: [methodName]"menggunakangetMethodName()statis dari class cara pembayaran yang diberikan.main.php: Sertakan semua file class pembayaran dan pemrosesnya. Buat sebuah instancePaymentProcessor. Kamu akan menerima tiga input: empat digit terakhir kartu kredit, alamat email PayPal, dan jumlah pembayaran. Buat instanceCreditCarddanPayPaldengan 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
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online