Menu
Coddy logo textTech

Salt Okunur Ö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 kullanıma sundu. 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 sözcüğünü ekleyerek salt okunur bir özellik 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, salt okunur bir özelliği değiştirmeye çalışmak hataya neden olur. Bu, onları bir nesnenin ömrü boyunca sabit kalması gereken değerler (kimlikler veya oluşturulma zaman damgaları gibi) için mükemmel kılar.

Salt okunur özelliklerin bir tür bildirimi olmalıdır ve yalnızca bildirimi yapan sınıfın içinden (genellikle oluşturucuda) bir kez atanabilir. Normal özelliklerin aksine, bildirim sırasında varsayılan bir değer verilemez. Her görünürlük değiştiricisiyle ç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

Temel Nokta: Salt okunur özellikler, özellik düzeyinde değişmezlik sağlar. Bir nesneyi tanımlayan veya oluşturulduktan sonra değişmemesi gereken veriler için idealdir; çalışma zamanında başlatma esnekliğini, yanlışlıkla yapılan değişiklikleri önleme güvenliğiyle birleştirir.

challenge icon

Görev

Kolay

Başlatma işleminden sonra kritik ayarların yanlışlıkla değiştirilememesini sağlamak için readonly özelliklerini kullanan değişmez bir yapılandırma sistemi oluşturalım.

Uygulama yapılandırmasını yönetmek üzere 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 public readonly özelliği olmalıdır: string $appName, string $version ve int $maxConnections. Üç readonly özelliğin tümünü tek ve sade bir kurucu tanımında bildirmek ve başlatmak için kurucu destekli özellik tanımını kullanın. "[appName] v[version] (max: [maxConnections] connections)" biçiminde bir dize döndüren bir getInfo() metodu ekleyin.
  • main.php: Config sınıfı dosyasını dahil edin. Üç girdi alacaksınız: uygulama adı, sürüm ve tamsayıya dönüştürülmesi gereken bir dize olarak maksimum bağlantı sayısı. Bu değerleri kullanarak bir Config nesnesi oluşturun. İlk satırda getInfo() sonucunu yazdırın. Ardından her readonly özelliğini doğrudan erişerek kendi satırında yazdırın: uygulama adı, sürüm ve maksimum bağlantı sayısı.

Readonly özellikleri, bir yapılandırma oluşturulduktan sonra değerlerinin sabit kalmasını sağlar; bu da uygulamanızın çalışma süresi boyunca değişmeden kalması gereken ayarlar için idealdir. Kurucu destekli özellik tanımının readonly ile birlikte, değişmez değer nesnelerini tanımlamak için ne kadar kısa bir yol sunduğuna dikkat edin.

Çıktınız, biçimlendirilmiş bilgi dizesini ve ardından her bir özelliğin değerini göstermelidir; böylece readonly özelliklerinin sınıfın dışından hâlâ okunabildiği kanıtlanır.

Kendin dene

<?php

require_once 'Config.php';

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

// TODO: Girdi değerlerini kullanarak bir Config nesnesi oluştur

// TODO: getInfo() sonucunu yazdır

// TODO: Her readonly özelliği kendi satırına yazdır:
// - uygulama adı
// - sürüm
// - maksimum bağlantılar

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

Kendi başına pratik yap: Online PHP derleyicisi