CodeBlanks Logo Icon CodeBlanks

readonly property

PHP kursu · Uzman · Ders 36/54

readonly property ile yalnızca bir kez yazılabilen özellikleri öğrenirsin.

readonly property nedir?

PHP 8.1 ile gelen readonly anahtar kelimesi, bir özelliği yalnızca bir kez yazılabilir olarak işaretler. İlk değer atandıktan sonra değiştirilemez.

Bu, değeri yaşam süresince sabit kalan değer nesneleri (value object) kurmak için idealdir. Yanlışlıkla sonradan değiştirme riskini ortadan kaldırır.

readonly özellik türü ile birlikte bildirilir ve mutlaka bir başlangıç değeri almak zorundadır.

Kurucu özellik yükseltme ve readonly sınıf

PHP 8.0 ile gelen kurucu özellik yükseltme (constructor property promotion), özellikleri doğrudan kurucu parametre listesinde bildirir: public function __construct(public readonly float $x).

PHP 8.2'de readonly class gelir. Sınıfı readonly işaretlersen tüm özellikler otomatik readonly olur; her birine ayrı ayrı yazmaya gerek kalmaz.

Bu ikisini birleştirerek değişmez (immutable) değer nesnelerini birkaç satırda yazarsın.

Uygulama Değişmez Money sınıfı

Değişmez bir Money sınıfı yaz. Sınıf readonly class olarak bildirilsin ve $amount (int) ile $currency (string) özellikleri kurucu özellik yükseltme ile tanımlansın.

Aşağıdaki oluşturma ve yazdırma satırları çalıştığında 100 çıktısını vermeli.

Örnek çözümü göster
readonly class Money {
  public function __construct(
    public readonly int $amount,
    public readonly string $currency
  ) {}
}

$m = new Money(100, "TRY");
echo $m->amount;

Kendini test et

  1. readonly özelliğe ne zaman değer yazılabilir?

    class Point {
        public function __construct(
            public readonly float $x
        ) {}
    }
    
    $p = new Point(3.5);
    // buradan sonra $p->x'i değiştirebilir miyiz?
    • Yalnızca bildirildiği sınıfın kurucusu içinde
    • Her yerden, istediğin zaman
    • Yalnızca statik yöntemlerden
    • Alt sınıflardan istediğin zaman
    Cevabı göster

    Yalnızca bildirildiği sınıfın kurucusu içinde — Doğru. readonly özelliğe yalnızca bildirildiği sınıfın kurucusu içinde değer atanabilir; sonra donar.

  2. Kurucu özellik yükseltme ile readonly

    class Point {
      public function __construct(
        public ____ float $x,
        public readonly float $y
      ) {}
    }
    Cevabı göster
    class Point {
      public function __construct(
        public readonly float $x,
        public readonly float $y
      ) {}
    }
  3. readonly class ne yapar?

    • Sınıfı kalıtma karşı korur
    • Sınıfın özelliklerini gizler
    • Tüm özellikleri otomatik readonly yapar
    • Sınıfı soyutlar (abstract)
    Cevabı göster

    Tüm özellikleri otomatik readonly yapar — Doğru. readonly class, sınıftaki tüm özellikleri otomatik olarak readonly yapar; her birine ayrı anahtar kelime gerekmez.

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