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
AliceAtandı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.
Görev
KolayKritik 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 birConfigsınıfı tanımlayın. Sınıfın üç adet genel salt okunur (public readonly) özelliği olmalıdır:string $appName,string $versionveint $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 birgetInfo()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 birConfignesnesi oluşturun. İlk satıragetInfo()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ı
?>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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar KelimesiMetotlarÖzelliklerYapıcı Metot (__construct)Yıkıcı Metot (__destruct)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar KelimesiMetot Geçersiz Kılmafinal Anahtar KelimesiSoyut SınıflarÖzet - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicilere Derinlemesine BakışGetter ve Setter MetotlarıBilgi GizlemeConstructor Promotion (8.0)Özet - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımDependency InjectionAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlama: Derinlemesine İncelemeGenerator'lar ve Iterator'lar13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı2İsim Alanları ve Autoloading
İsim Alanlarına Girişuse Anahtar KelimesiPSR-4 Autoloading StandartıComposer AutoloaderÖzet - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Fazla Arayüz UygulamaArayüz vs Soyut SınıfArayüzler ile Tip BelirlemeÖzet - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Nesne Klonlama__serialize & __unserializeÖzet - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerReadonly Özellikler (PHP 8.1)Özet - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmaya Yeniden BakışArayüzler ile Çok BiçimlilikType Hinting ve Union TypesLate Static BindingÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişÇoklu Trait KullanımıTrait Çakışma ÇözümüTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım12Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı15Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi