Özet - Modern PHP
readonly, enum, match ve named arguments'la modern bir durum makinesi yazarsın.
Modern PHP ile durum makinası
Bu grupta PHP 8+ özelliklerini gördün: readonly özellikler, enum, match ifadesi, named arguments, Fiber ve first-class callable (...).
Bunları birleştirerek değişmez (immutable) ve tür güvenli modeller kurabilirsin. Bir siparişin durumunu enum ile tanımlar, readonly sınıfla sarar, match ile etiketlersin.
İsimli argümanlar çağrıyı okunaklı yapar. Tip sisteminde intersection types ise bir parametreyi birden fazla arayüze bağlar; function handle(HasId & HasName $x) gibi.
Uygulama Sipariş durum makinası
OrderStatus adında, int backed bir enum tanımla: Pending = 1, Shipped = 2, Delivered = 3.
readonly class Order yaz; kurucu özellik yükseltme ile int $id ve OrderStatus $status alsın. label(Order $o): string yöntemini match($o->status) ile yaz; Shipped için "Yola çıktı" dönsün.
Aşağıdaki çağrı Yola çıktı çıktısını vermeli.
Örnek çözümü göster
enum OrderStatus: int {
case Pending = 1;
case Shipped = 2;
case Delivered = 3;
}
readonly class Order {
public function __construct(
public int $id,
public OrderStatus $status
) {}
}
function label(Order $o): string {
return match($o->status) {
OrderStatus::Pending => "Beklemede",
OrderStatus::Shipped => "Yola çıktı",
OrderStatus::Delivered => "Teslim edildi",
};
}
$o = new Order(id: 7, status: OrderStatus::Shipped);
echo label($o);
Kendini test et
-
Sipariş durumunu temsil etmek için en uygun?
- string
- int sabiti
- dizi
- backed enum
Cevabı göster
backed enum — Doğru. backed enum durum adlarını ve değerlerini bir arada tutar; tür güvenli ve switch/match ile kolay eşleşir.
-
match kolu oku
$label = match($o->status) { OrderStatus::Shipped ____ "Yola çıktı", default => "Bilinmiyor", };Cevabı göster
$label = match($o->status) { OrderStatus::Shipped => "Yola çıktı", default => "Bilinmiyor", }; -
Özellik - rol eşleştirmesi
- readonly
- yalnızca bir kez yazılır
- enum
- tür güvenli sabit kümesi
- match
- değer döndüren koşul
- ?->
- null güvenli erişim