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ı yerine nesne başlatma sırasında ayarlanır.

Tür bildiriminden önce readonly anahtar kelimesini ekleyerek bir readonly özelliği bildirirsiniz:

<?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

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 özellikler bir tür bildirimine sahip olmalıdır ve yalnızca bir kez, ya yapıcıda (constructor) ya da bildirim noktasında başlatılabilirler. Herhangi bir görünürlük değiştiricisi (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 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ı (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 ö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 nesneleri 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.

Kopya kağıdı

PHP 8.1, yalnızca bir kez atanabilen ve sonrasında değiştirilemeyen readonly (salt okunur) özelliklerini tanıttı:

<?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; // U001

Readonly özelliklerinin bir tür bildirimine sahip olması gerekir ve yalnızca bir kez başlatılabilirler. Herhangi bir görünürlük belirleyicisi (visibility modifier) ile çalışabilirler ve yapıcı metod terfisi (constructor promotion) ile birleştirilebilirler:

<?php
class Product {
    public function __construct(
        public readonly string $sku,
        private readonly float $cost
    ) {}
}

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

Readonly özellikleri; ID'ler, zaman damgaları veya yapılandırma ayarları gibi bir nesnenin ömrü boyunca sabit kalması gereken değerler için idealdir.

Kendin dene

<?php

require_once 'Config.php';

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

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

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

// YAPILACAK: Her bir salt okunur özelliği kendi satırında yazdırın:
// - uygulama adı
// - sürüm
// - maksimum bağlantı sayısı

?>
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