CodeBlanks Logo Icon CodeBlanks

Özet - Arayüzler

PHP kursu · Orta seviye · Ders 52/115

interface, implements ve polymorphism'le ödeme yöntemi sistemi yazarsın.

Özet - Arayüzler

Bu grupta beş kavram öğrendin:

  • interface: method imzalarını listeleyen sözleşme.
  • implements: sınıfın sözleşmeyi kabul etmesi; tüm methodlar yazılır.
  • çoklu interface: virgülle birden fazla sözleşme birleştirme.
  • polymorphism: aynı interface'i uygulayan sınıfları ortak tipte kullanma.
  • interface vs abstract: capability için interface, ortak temel için abstract.

Şimdi tüm bunları bir ödeme yöntemi sisteminde birleştireceksin: Payable interface'i ve iki uygulayan sınıf.

Uygulama Payable interface ile ödeme sistemi

Önce interface Payable { public function pay(int $amount): string; } tanımla. Sonra class CashPayment implements Payable ve class CardPayment implements Payable yaz. Her ikisinde de pay(int $amount): string methodu olsun; CashPayment return "Cash: " . $amount, CardPayment return "Card: " . $amount döndürsün. Sonra function processPayment(Payable $method, int $amount): void { echo $method->pay($amount) . "\n"; } yaz ve processPayment(new CashPayment(), 100) ile processPayment(new CardPayment(), 250) çağır.

Örnek çözümü göster
Önce interface Payable'ı tanımla. CashPayment ve CardPayment sınıflarını implements Payable ile yaz, herbirinde pay methodu. Sonra processPayment(Payable $method, int $amount) fonksiyonunu yaz ve iki nesneyle çağır.
Örnek çözüm:
<?php
// Ödeme yöntemi sistemini tanımla
interface Payable {
    public function pay(int $amount): string;
}
class CashPayment implements Payable {
    public function pay(int $amount): string {
        return "Cash: " . $amount;
    }
}
class CardPayment implements Payable {
    public function pay(int $amount): string {
        return "Card: " . $amount;
    }
}
function processPayment(Payable $method, int $amount): void {
    echo $method->pay($amount) . "\n";
}
processPayment(new CashPayment(), 100);
processPayment(new CardPayment(), 250);

Arayüzler ve sonraki adım

interface, implements, çoklu interface, polymorphism ve interface vs abstract kavramlarını birleştirdin. Ödeme sisteminde tek bir sözleşmeyle farklı yöntemleri aynı fonksiyondan çağırdın; yeni yöntem eklemek yalnızca yeni bir sınıf yazmaktan ibaret.

Unutma: capability için interface, ortak temel için abstract class. Bir sonraki grupta abstract class'ı derinlemesine inceleyeceğiz: abstract method, abstract sınıf tasarımı ve ne zaman kullanılacağı.

Kendini test et

  1. tüm arayüz kavramlarını eşleştir

    interface
    Sözleşme
    implements
    Sınıf sözleşmeyi kabul eder
    implements A, B
    Çoklu interface
    Shape $shape
    Polymorphism
  2. ödeme yöntemi sistemi için en iyi tasarım?

    • Tek sınıfta tüm yöntemleri if/else ile ayırmak
    • Payable interface'ini uygulayan ayrı sınıflar yapmak
    • Her yöntem için ayrı bir interface tanımlamak
    • abstract class olmadan sınıf yazmak
    Cevabı göster

    Payable interface'ini uygulayan ayrı sınıflar yapmak — Doğru. Payable interface'ini uygulayan ayrı sınıflar polymorphism sağlar; yeni yöntem eklemek kolaydır.

  3. sisteme yeni BitcoinPayment eklemek için ne gerekir?

    • Mevcut CashPayment ve CardPayment sınıflarını değiştirmek
    • processPayment fonksiyonunu yeniden yazmak
    • Payable uygulayan yeni bir BitcoinPayment sınıfı eklemek
    • interface'i silip yeniden tanımlamak
    Cevabı göster

    Payable uygulayan yeni bir BitcoinPayment sınıfı eklemek — Doğru. Yeni bir sınıf Payable uyguladığında processPayment değişmeden onu da kabul eder.

Orta seviye bölümündeki tüm dersler