CodeBlanks Logo Icon CodeBlanks

Çoklu trait

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.

Başlangıç kodu

index.php
<?php
// Logger ve Notifier trait'lerini tanımla, Order sınıfında birleştir

Örnek çözüm

index.php
<?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";

Beklenen çıktı

[LOG] sipariş alındı
[BİLDİRİM] kargoya verildi

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

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; Doğru cevap

Açıklama: use satırında trait adları virgülle ayrılır: use Logger, Notifier;

2 Çoklu trait kullanımını tamamla

Soru
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";
Cevap
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";

Açıklama: use Logger, Notifier; ile iki trait birleştirilir; $o->notify() çalışır.

3 Trait ile yeteneğini eşleştir

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

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