요약 - 결제 처리기
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 37번째.
챌린지
쉬움다형성에 대해 배운 모든 것을 하나로 묶는 완전한 결제 처리 시스템을 구축해 보겠습니다. 서로 다른 결제 수단을 단일화된 하나의 프로세서를 통해 처리할 수 있는 인터페이스 기반 아키텍처를 만들게 됩니다. 이는 다형성이 코드를 얼마나 유연하고 확장 가능하게 만드는지 보여줍니다.
코드는 다음 다섯 개의 파일로 구성됩니다:
PaymentMethod.php— 두 개의 메서드 시그니처를 가진PaymentMethod인터페이스를 정의합니다: 결제를 처리하는process(float $amount): string와 결제 유형 이름을 반환하는 정적 메서드getMethodName(): string입니다. 이 계약은 모든 결제 수단이 일관되게 처리될 수 있도록 보장합니다.CreditCard.php—PaymentMethod를 구현하는CreditCard클래스를 생성합니다. 인터페이스 파일을 포함하세요. 이 클래스는 생성자를 통해 설정되는 private$lastFourDigits속성을 가져야 합니다.process()를 구현하여"Processing $[amount] via Credit Card ending in [lastFourDigits]"를 반환하도록 합니다 (금액은 소수점 2자리까지 포맷팅). 지연 정적 바인딩(late static binding)을 사용하여"Credit Card"를 반환하도록 정적getMethodName()을 구현합니다.PayPal.php—PaymentMethod를 구현하는PayPal클래스를 생성합니다. 인터페이스 파일을 포함하세요. 이 클래스는 생성자를 통해 설정되는 private$email속성을 가져야 합니다.process()를 구현하여"Processing $[amount] via PayPal account [email]"를 반환하도록 합니다 (금액은 소수점 2자리까지 포맷팅)."PayPal"을 반환하도록 정적getMethodName()을 구현합니다.PaymentProcessor.php— 결제를 조율하는PaymentProcessor클래스를 생성합니다. 인터페이스 파일을 포함하세요. 인터페이스 타입 힌팅을 사용하여 모든 결제 수단을 수용하는executePayment(PaymentMethod $method, float $amount): string메서드를 추가합니다. 이 메서드는 결제 수단의process()를 호출한 결과를 반환해야 합니다. 전달된 결제 수단 클래스의 정적getMethodName()을 사용하여"Payment via: [methodName]"을 반환하는describeMethod(PaymentMethod $method): string메서드를 추가합니다.main.php— 모든 결제 클래스 파일과 프로세서를 포함합니다.PaymentProcessor인스턴스를 생성합니다. 신용카드의 마지막 네 자리 숫자, PayPal 이메일 주소, 결제 금액이라는 세 가지 입력을 받게 됩니다. 각각의 식별자를 사용하여CreditCard와PayPal인스턴스를 생성합니다. 금액을 float으로 변환합니다. 프로세서를 사용하여 신용카드로 먼저 결제를 실행한 다음, PayPal로 결제를 실행합니다. 각 결과를 개별 줄에 출력합니다. 마지막으로 PayPal 결제 수단에 대한 메서드 설명을 출력합니다.
이 디자인의 장점은 PaymentProcessor가 신용카드나 PayPal에 대해 구체적으로 알 필요가 없다는 것입니다. 오직 PaymentMethod 인터페이스만 알면 됩니다. 나중에 BankTransfer나 Cryptocurrency 클래스를 추가하더라도 프로세서는 수정 없이 이를 처리할 수 있습니다. 이것이 바로 지연 정적 바인딩과 결합된 인터페이스 기반 다형성의 힘입니다!
직접 해보기
<?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: 마지막 4자리 숫자로 CreditCard 인스턴스 생성
// TODO: 이메일로 PayPal 인스턴스 생성
// TODO: 신용카드로 결제를 실행하고 결과 출력
// TODO: PayPal로 결제를 실행하고 결과 출력
// TODO: PayPal 결제 수단에 대한 수단 설명 출력
?>객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션