Menu
Coddy logo textTech

Readonly Özellikler (PHP 8.1)

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 19 / 91.

PHP 8.1, yalnızca bir kez atanabilen ve sonrasında değiştirilemeyen readonly özelliklerini tanıttı. Sabitlerin aksine, readonly özellikleri sınıf tanımlama zamanında değil, nesne başlatma sırasında ayarlanır.

Tür bildiriminden önce readonly anahtar kelimesini ekleyerek salt okunur bir özellik tanımlarsınız:

<?php
class User {
    public readonly string $id;
    public readonly string $name;
    
    public function __construct(string $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

$user = new User("U001", "Alice");
echo $user->id . "\n";
echo $user->name;

Çıktı:

U001
Alice

Bir kez atandıktan sonra, bir readonly özelliğini değiştirmeye çalışmak bir hataya neden olur. Bu, onları ID'ler veya oluşturma zaman damgaları gibi bir nesnenin ömrü boyunca sabit kalması gereken değerler için mükemmel kılar.

Readonly özellikleri bir tür bildirimine sahip olmalıdır ve yalnızca bildirildiği sınıfın içinden (genellikle constructor içinde) bir kez atanabilirler. Normal özelliklerin aksine, bildirim sırasında onlara varsayılan bir değer verilemez. Herhangi bir görünürlük belirleyicisi (visibility modifier) ile çalışırlar:

<?php
class Product {
    public function __construct(
        public readonly string $sku,
        private readonly float $cost
    ) {}
    
    public function getCost(): float {
        return $this->cost;
    }
}

$product = new Product("ABC123", 29.99);
echo $product->sku;

Çıktı:

ABC123

Önemli Nokta: Readonly özellikleri, özellik düzeyinde değişmezlik sağlar. Bir nesneyi tanımlayan veya oluşturulduktan sonra değişmemesi gereken veriler için idealdirler; çalışma zamanı başlatma (runtime initialization) esnekliğini, yanlışlıkla yapılan değişiklikleri önleme güvenliğiyle birleştirirler.

challenge icon

Görev

Kolay

Kritik ayarların başlatıldıktan sonra yanlışlıkla değiştirilememesini sağlamak için salt okunur (readonly) özellikler kullanan, değişmez (immutable) bir yapılandırma sistemi oluşturalım.

Uygulama yapılandırmasını yönetmek için birlikte çalışan iki dosya oluşturacaksınız:

  • Config.php — Değişmez ayarlara sahip uygulama yapılandırmasını temsil eden bir Config sınıfı tanımlayın. Sınıfın üç adet genel salt okunur (public readonly) özelliği olmalıdır: string $appName, string $version ve int $maxConnections. Her üç salt okunur özelliği tek bir temiz yapıcı (constructor) tanımında bildirmek ve başlatmak için yapıcı tanıtımını (constructor promotion) kullanın. "[appName] v[version] (max: [maxConnections] connections)" formatında bir dize döndüren bir getInfo() yöntemi ekleyin.
  • main.php — Config sınıf dosyasını dahil edin. Üç girdi alacaksınız: uygulama adı, sürüm ve maksimum bağlantı sayısı (tam sayıya dönüştürülmesi gereken bir dize olarak). Bu değerleri kullanarak bir Config nesnesi oluşturun. İlk satıra getInfo() sonucunu yazdırın. Ardından, her bir salt okunur özelliğe doğrudan erişerek her birini kendi satırına yazdırın: uygulama adı, sürüm ve maksimum bağlantı sayısı.

Salt okunur (readonly) özellikler, bir yapılandırma oluşturulduktan sonra değerlerinin yerinde kilitlenmesini sağlar; bu, uygulamanızın çalışma süresi boyunca sabit kalması gereken ayarlar için mükemmeldir. Yapıcı tanıtımının (constructor promotion) salt okunur (readonly) ile birleştiğinde, değişmez değer nesnelerini tanımlamak için nasıl çok kısa bir yol oluşturduğuna dikkat edin.

Çıktınız, biçimlendirilmiş bilgi dizesini ve ardından her bir özellik değerini görüntülemeli, böylece salt okunur özelliklerin sınıf dışından hala okunabildiğini göstermelidir.

Kendin dene

<?php

require_once 'Config.php';

// Girdileri oku
$appName = trim(fgets(STDIN));
$version = trim(fgets(STDIN));
$maxConnections = intval(trim(fgets(STDIN)));

// TODO: Giriş değerlerini kullanarak bir Config nesnesi oluşturun

// TODO: getInfo() sonucunu yazdırın

// TODO: Her bir readonly özelliği kendi satırına yazdırın:
// - app name
// - version
// - max connections

?>
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler