CodeBlanks Logo Icon CodeBlanks

Çoklu trait

PHP kursu · Orta seviye · Ders 61/115

Bir sınıfa birden fazla trait kullanarak yetenek birleştirmeyi öğrenirsin.

Birden fazla trait kullanma

Bir sınıfa birden fazla trait eklemek mümkündür. use satırında trait adlarını virgülle ayırırsın: use Logger, Notifier;. Sınıf, her iki trait'in metotlarını da kazanır.

Örnek:

class Order {
    use Logger, Notifier;
}

$o = new Order();
$o->log("kayıt");
$o->notify("gönderildi");

Bu sayede bir sınıfın yeteneklerini küçük, odaklı trait'lerden bileştirebilirsin.

Trait bileşimi (composition)

Çoklu trait kullanımı, sınıf tasarımında bileşimi (composition) güçlendirir. Her trait tek bir sorumluluk taşır: Logger kaydeder, Notifier bildirir, Cache önbelleğe alır. Sınıf, ihtiyacı olan trait'leri seçip birleştirir.

Bu yaklaşım, büyük bir ebeveyn sınıftan her şeyi miras almaktan daha esnektir. Her davranışı ayrı trait'te tutmak, bakımı ve testi kolaylaştırır.

Uygulama Logger ve Notifier'ı Order sınıfında birleştir

Bir Logger trait'i tanımla: public function log(string $m): string metodu return "[LOG] " . $m; döndürsün. Bir Notifier trait'i tanımla: public function notify(string $m): string metodu return "[BİLDİRİM] " . $m; döndürsün. Sonra Order sınıfı use Logger, Notifier; ile ikisini kullansın. $o = new Order() ile örnek oluştur, echo $o->log("sipariş alındı") . "\n" ve echo $o->notify("kargoya verildi") . "\n" çağrılarını yaz.

Örnek çözümü göster
Önce trait Logger { ... } ve trait Notifier { ... } yaz. Sonra class Order { use Logger, Notifier; } ekle. $o = new Order(); ile her iki metodu çağır.
Örnek çözüm:
<?php
// Logger ve Notifier trait'lerini tanımla, Order sınıfında birleştir
trait Logger {
    public function log(string $m): string {
        return "[LOG] " . $m;
    }
}

trait Notifier {
    public function notify(string $m): string {
        return "[BİLDİRİM] " . $m;
    }
}

class Order {
    use Logger, Notifier;
}

$o = new Order();
echo $o->log("sipariş alındı") . "\n";
echo $o->notify("kargoya verildi") . "\n";

Kendini test et

  1. Logger ve Notifier trait'lerini bir sınıfa eklemenin doğru yazımı?

    • use Logger extends Notifier;
    • use Logger, Notifier;
    • class Order extends Logger, Notifier
    • use Logger -> Notifier;
    Cevabı göster

    use Logger, Notifier; — Doğru. use satırında trait adları virgülle ayrılır: use Logger, Notifier;

  2. Çoklu trait kullanımını tamamla

    trait Logger {
        public function log() { return "log"; }
    }
    trait Notifier {
        public function notify() { return "bildirim"; }
    }
    
    class Order {
        use Logger, ____;
    }
    
    $o = new Order();
    echo $o->notify() . "\n";
    Cevabı göster
    trait Logger {
        public function log() { return "log"; }
    }
    trait Notifier {
        public function notify() { return "bildirim"; }
    }
    
    class Order {
        use Logger, Notifier;
    }
    
    $o = new Order();
    echo $o->notify() . "\n";
  3. Trait ile yeteneğini eşleştir

    Logger
    olay kaydı
    Notifier
    bildirim gönderme
    Serializer
    nesneyi metne çevirme
    Cache
    geçici saklama

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