복습 - 결제 처리기
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 37번째.
챌린지
쉬움다형성에 대해 지금까지 배운 모든 내용을 하나로 결합하는 완전한 결제 처리 시스템을 만들어 봅시다. 서로 다른 결제 수단을 하나의 통합된 processor를 통해 처리할 수 있는 interface 기반 아키텍처를 만들 것입니다. 이를 통해 다형성이 코드를 얼마나 유연하고 확장 가능하게 만드는지 확인할 수 있습니다.
코드를 다섯 개의 파일로 구성합니다.
PaymentMethod.php: 두 가지 메서드 시그니처를 가진PaymentMethodinterface를 Define합니다. 결제를 처리하는process(float $amount): string과 결제 유형 이름을 반환하는 static 메서드getMethodName(): string입니다. 이 계약을 통해 모든 결제 수단을 일관된 방식으로 처리할 수 있습니다.CreditCard.php:PaymentMethod를 implements하는CreditCardclass를 Create합니다. interface 파일을 Include합니다. 이 class에는 constructor를 통해 설정되는 private$lastFourDigits속성이 있어야 합니다.process()를 Implement하여"Processing $[amount] via Credit Card ending in [lastFourDigits]"을 반환하도록 합니다(금액은 소수점 이하 2자리로 Format). late static binding을 사용하여 staticgetMethodName()을 Implement하고"Credit Card"를 반환하도록 합니다.PayPal.php:PaymentMethod를 implements하는PayPalclass를 Create합니다. interface 파일을 Include합니다. 이 class에는 constructor를 통해 설정되는 private$email속성이 있어야 합니다.process()를 Implement하여"Processing $[amount] via PayPal account [email]"을 반환하도록 합니다(금액은 소수점 이하 2자리로 Format). staticgetMethodName()을 Implement하여"PayPal"을 반환하도록 합니다.PaymentProcessor.php: 결제를 조정하는PaymentProcessorclass를 Create합니다. interface 파일을 Include합니다. 모든 결제 수단을 accept할 수 있도록 interface type hinting을 사용하는executePayment(PaymentMethod $method, float $amount): string메서드를 Add합니다. 이 메서드는 결제 수단에서process()를 calling한 결과를 반환해야 합니다. 전달된 결제 수단의 class에서 staticgetMethodName()을 사용하여"Payment via: [methodName]"을 반환하는describeMethod(PaymentMethod $method): string메서드도 Add합니다.main.php: 모든 결제 class 파일과 processor를 Include합니다.PaymentProcessorinstance를 Create합니다. 세 가지 inputs를 받습니다. 신용 카드의 last four digits, PayPal email 주소, 그리고 결제 amount입니다. 각각의 식별자를 사용하여CreditCard와PayPalinstance를 모두 Create합니다. amount를 float로 변환합니다. processor를 사용하여 먼저 신용 카드로 결제를 Execute한 다음 PayPal로 결제를 Execute합니다. 각 결과를 한 줄에 하나씩 Print합니다. 마지막으로 PayPal 결제 수단에 대한 메서드 설명을 Print합니다.
이 설계의 장점은 PaymentProcessor가 신용 카드나 PayPal에 대해 구체적으로 아무것도 알 필요가 없다는 것입니다. PaymentMethod interface만 알고 있으면 됩니다. 내일 BankTransfer 또는 Cryptocurrency class를 Add하더라도 processor는 아무런 수정 없이 이를 처리할 수 있습니다. 이것이 interface 기반 다형성과 late static binding이 결합된 강력한 기능입니다!
직접 해보기
<?php
// 필요한 모든 파일 포함
require_once 'CreditCard.php';
require_once 'PayPal.php';
require_once 'PaymentProcessor.php';
// 입력 읽기
$lastFourDigits = trim(fgets(STDIN));
$paypalEmail = trim(fgets(STDIN));
$amount = floatval(trim(fgets(STDIN)));
// TODO: PaymentProcessor 인스턴스 생성
// TODO: 마지막 네 자리 숫자로 CreditCard 인스턴스 생성
// TODO: 이메일로 PayPal 인스턴스 생성
// TODO: 신용카드로 결제를 실행하고 결과 출력
// TODO: PayPal로 결제를 실행하고 결과 출력
// TODO: PayPal 결제 방법의 메서드 설명 출력
?>객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러