Ôn tập: bộ xử lý thanh toán
Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 37 trên 91.
Thử thách
DễHãy xây dựng một hệ thống xử lý thanh toán hoàn chỉnh, kết hợp mọi điều bạn đã học về tính đa hình. Bạn sẽ tạo một kiến trúc dựa trên interface, trong đó có thể xử lý nhiều phương thức thanh toán khác nhau thông qua một bộ xử lý thống nhất, qua đó cho thấy tính đa hình giúp code linh hoạt và dễ mở rộng như thế nào.
Bạn sẽ sắp xếp code trong năm tệp:
PaymentMethod.php: Định nghĩa interfacePaymentMethodvới hai chữ ký phương thức:process(float $amount): stringđể xử lý thanh toán và phương thức tĩnhgetMethodName(): stringtrả về tên loại thanh toán. Giao kèo này đảm bảo có thể xử lý đồng nhất mọi phương thức thanh toán.CreditCard.php: Tạo lớpCreditCardtriển khaiPaymentMethod. Đưa tệp interface vào. Lớp này cần có thuộc tính riêng tư$lastFourDigits, được thiết lập thông qua hàm khởi tạo. Triển khaiprocess()để trả về"Processing $[amount] via Credit Card ending in [lastFourDigits]"(định dạng số tiền với 2 chữ số thập phân). Triển khai phương thức tĩnhgetMethodName()bằng late static binding để trả về"Credit Card".PayPal.php: Tạo lớpPayPaltriển khaiPaymentMethod. Đưa tệp interface vào. Lớp này cần có thuộc tính riêng tư$email, được thiết lập thông qua hàm khởi tạo. Triển khaiprocess()để trả về"Processing $[amount] via PayPal account [email]"(định dạng số tiền với 2 chữ số thập phân). Triển khai phương thức tĩnhgetMethodName()để trả về"PayPal".PaymentProcessor.php: Tạo lớpPaymentProcessorđể điều phối các khoản thanh toán. Đưa tệp interface vào. Thêm phương thứcexecutePayment(PaymentMethod $method, float $amount): string, sử dụng gợi ý kiểu interface để nhận bất kỳ phương thức thanh toán nào. Phương thức này cần trả về kết quả khi gọiprocess()trên phương thức thanh toán. Thêm phương thứcdescribeMethod(PaymentMethod $method): stringđể trả về"Payment via: [methodName]", sử dụng phương thức tĩnhgetMethodName()từ lớp của phương thức thanh toán được truyền vào.main.php: Đưa tất cả các tệp lớp thanh toán và bộ xử lý vào. Tạo một instancePaymentProcessor. Bạn sẽ nhận ba đầu vào: bốn chữ số cuối của thẻ tín dụng, địa chỉ email PayPal và số tiền thanh toán. Tạo một instanceCreditCardvà một instancePayPalvới các thông tin định danh tương ứng. Chuyển số tiền thành số thực. Dùng bộ xử lý để thực hiện thanh toán bằng thẻ tín dụng trước, sau đó bằng PayPal. In mỗi kết quả trên một dòng riêng. Cuối cùng, in phần mô tả phương thức thanh toán PayPal.
Điểm hay của thiết kế này là PaymentProcessor không cần biết cụ thể về thẻ tín dụng hay PayPal. Nó chỉ cần biết về interface PaymentMethod. Ngày mai, bạn có thể thêm lớp BankTransfer hoặc Cryptocurrency, và bộ xử lý sẽ xử lý chúng mà không cần chỉnh sửa gì. Đó là sức mạnh của tính đa hình dựa trên interface kết hợp với late static binding!
Tự làm thử
<?php
// Thêm tất cả tệp cần thiết
require_once 'CreditCard.php';
require_once 'PayPal.php';
require_once 'PaymentProcessor.php';
// Đọc các giá trị đầu vào
$lastFourDigits = trim(fgets(STDIN));
$paypalEmail = trim(fgets(STDIN));
$amount = floatval(trim(fgets(STDIN)));
// TODO: Tạo một instance của PaymentProcessor
// TODO: Tạo một instance của CreditCard với bốn chữ số cuối
// TODO: Tạo một instance của PayPal với địa chỉ email
// TODO: Thực hiện thanh toán bằng thẻ tín dụng và in ra kết quả
// TODO: Thực hiện thanh toán bằng PayPal và in ra kết quả
// TODO: In ra mô tả phương thức của phương thức thanh toán PayPal
?>Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa $thisPhương thứcThuộc tínhHàm khởi tạo (__construct)Hàm hủy (__destruct)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnTừ khóa parent::Ghi đè phương thứcTừ khóa finalLớp trừu tượngÔn tập: hệ thống phân cấp nhân viên7Đóng gói
Công khai, được bảo vệ, riêng tưTìm hiểu sâu về bộ điều chỉnh quyền truy cậpGetter và setterẨn thông tinRút gọn hàm khởi tạo (8.0)Ôn tập: hệ thống hồ sơ học sinh2Không gian tên và tự động nạp
Giới thiệu về không gian tênTừ khóa useChuẩn tự động nạp PSR-4Trình tự động nạp của ComposerÔn tập: dự án có tổ chức5Giao diện và hợp đồng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnGiao diện và lớp trừu tượngGợi ý kiểu với giao diệnÔn tập: Máy tính hình học8Phương thức ma thuật
Giới thiệu về phương thức ma thuật__toString và __debugInfo__get, __set, __isset, __unset__call và __callStatic__clone và sao chép đối tượng__serialize và __unserializeÔn tập: Bộ sưu tập tùy chỉnh3Thuộc tính của lớp
Thuộc tính instance và staticHằng số trong lớpPhương thức và thuộc tính staticThuộc tính private và protectedThuộc tính chỉ đọc (PHP 8.1)Ôn tập: Trình quản lý tài khoản ngân hàng6Đa hình
Xem lại việc ghi đè phương thứcĐa hình qua giao diệnGợi ý kiểu và kiểu hợpLiên kết tĩnh muộnÔn tập: bộ xử lý thanh toánTự luyện tập: Trình biên dịch PHP online