Menu
Coddy logo textTech

Özet - Ödeme İşlemcisi

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 37 / 91.

challenge icon

Görev

Kolay

Polimorfizm hakkında öğrendiğiniz her şeyi bir araya getiren eksiksiz bir ödeme işleme sistemi oluşturalım. Farklı ödeme yöntemlerinin tek ve birleşik bir işlemci aracılığıyla işlenebildiği, arayüz tabanlı bir mimari oluşturacaksınız: bu, polimorfizmin kodu nasıl esnek ve genişletilebilir hâle getirdiğini gösterir.

Kodunuzu beş dosyaya ayıracaksınız:

  • PaymentMethod.php: İki metot imzasına sahip bir PaymentMethod arayüzü tanımlayın: ödemeyi işlemek için process(float $amount): string ve ödeme türünün adını döndüren statik getMethodName(): string metodu. Bu sözleşme, herhangi bir ödeme yönteminin aynı şekilde işlenebilmesini sağlar.
  • CreditCard.php: PaymentMethod arayüzünü uygulayan bir CreditCard sınıfı oluşturun. Arayüz dosyasını dahil edin. Sınıf, yapıcı aracılığıyla ayarlanan private bir $lastFourDigits özelliğine sahip olmalıdır. process() metodunu, "Processing $[amount] via Credit Card ending in [lastFourDigits]" döndürecek şekilde uygulayın (amount değerini 2 ondalık basamakla biçimlendirin). Statik getMethodName() metodunu, "Credit Card" döndürmek için geç bağlamalı kullanarak uygulayın.
  • PayPal.php: PaymentMethod arayüzünü uygulayan bir PayPal sınıfı oluşturun. Arayüz dosyasını dahil edin. Sınıf, yapıcı aracılığıyla ayarlanan private bir $email özelliğine sahip olmalıdır. process() metodunu, "Processing $[amount] via PayPal account [email]" döndürecek şekilde uygulayın (amount değerini 2 ondalık basamakla biçimlendirin). Statik getMethodName() metodunu "PayPal" döndürecek şekilde uygulayın.
  • PaymentProcessor.php: Ödemeleri yöneten bir PaymentProcessor sınıfı oluşturun. Arayüz dosyasını dahil edin. Herhangi bir ödeme yöntemini kabul etmek için arayüz tür belirtimini kullanan bir executePayment(PaymentMethod $method, float $amount): string metodu ekleyin. Bu metot, ödeme yöntemi üzerinde process() çağrısının sonucunu döndürmelidir. Geçirilen ödeme yöntemi sınıfındaki statik getMethodName() metodunu kullanarak "Payment via: [methodName]" döndüren başka bir describeMethod(PaymentMethod $method): string metodu ekleyin.
  • main.php: Tüm ödeme sınıfı dosyalarını ve işlemciyi dahil edin. Bir PaymentProcessor örneği oluşturun. Üç girdi alacaksınız: bir kredi kartının son dört hanesi, bir PayPal e-posta adresi ve bir ödeme tutarı. İlgili tanımlayıcılarıyla hem bir CreditCard hem de bir PayPal örneği oluşturun. Tutarı float türüne dönüştürün. Ödemeyi önce kredi kartıyla, ardından PayPal ile gerçekleştirmek için işlemciyi kullanın. Her sonucu kendi satırına yazdırın. Son olarak, PayPal ödeme yönteminin yöntem açıklamasını yazdırın.

Bu tasarımın güzelliği, PaymentProcessor sınıfınızın özellikle kredi kartları veya PayPal hakkında hiçbir şey bilmemesidir. Yalnızca PaymentMethod arayüzünü bilir. Yarın bir BankTransfer veya Cryptocurrency sınıfı ekleyebilirsiniz ve işlemci, herhangi bir değişiklik yapılmasına gerek kalmadan bunları işleyebilir. Geç bağlamalı ile birleştirilmiş arayüz tabanlı polimorfizmin gücü budur!

Kendin dene

<?php
// Tüm gerekli dosyaları dahil et
require_once 'CreditCard.php';
require_once 'PayPal.php';
require_once 'PaymentProcessor.php';

// Girdileri oku
$lastFourDigits = trim(fgets(STDIN));
$paypalEmail = trim(fgets(STDIN));
$amount = floatval(trim(fgets(STDIN)));

// TODO: Bir PaymentProcessor örneği oluştur

// TODO: Son dört hane ile bir CreditCard örneği oluştur

// TODO: E-posta ile bir PayPal örneği oluştur

// TODO: Kredi kartı ile ödemeyi gerçekleştir ve sonucu yazdır

// TODO: PayPal ile ödemeyi gerçekleştir ve sonucu yazdır

// TODO: PayPal ödeme yöntemi için yöntem açıklamasını yazdır
?>

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online PHP derleyicisi