CodeBlanks Logo Icon CodeBlanks

Özet - Modern PHP

PHP kursu · Uzman · Ders 42/54

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

  1. 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.

  2. 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",
    };
    
  3. Ö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

Uzman bölümündeki tüm dersler