Çoklu trait
- PHP kursu
- Orta seviye
- Ders 61/115
- 5 dk
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
<?php
// Logger ve Notifier trait'lerini tanımla, Order sınıfında birleştirÖ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";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
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";
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 |