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
AliceAtandı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ı:
ABC123Temel 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.
Görev
KolayBaş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 birConfigsınıfı tanımlayın. Sınıfın üç adet public readonly özelliği olmalıdır:string $appName,string $versionveint $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 birgetInfo()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 birConfignesnesi oluşturun. İlk satırdagetInfo()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
?>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 SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarı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ıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi