PHP readonly Özellikler ile Değişmez Değer Nesneleri
PHP readonly Özellikler ile Değişmez Değer Nesneleri hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 5 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.
İçindekiler
PHP readonly Özellikler ile Değişmez Değer Nesneleri hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 5 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.
PHP readonly Özellikler ile Değişmez Değer Nesneleri nedir, neden önemlidir?
Para tutarı, e-posta adresi ya da tarih aralığı gibi değerler oluşturulduktan sonra değişmemelidir; aksi hâlde bir fonksiyonun içinde sessizce değiştirilen nesne başka bir yerde hataya yol açar. PHP 8.1 ile gelen readonly özellikler ve PHP 8.2 ile gelen readonly sınıflar, bu kuralı dil düzeyinde garanti eder.
Bilmeniz gereken 5 temel nokta
- Kurucuda doğrulama: Değer nesnesi geçersiz bir durumla hiç oluşturulamamalı; kontroller kurucu içinde yapılır.
- Değiştirmek yerine yenisini döndürün: topla() gibi yöntemler mevcut nesneyi değil, yeni bir nesne döndürür.
- readonly sınıf: PHP 8.2'de sınıfı readonly işaretlemek tüm özellikleri tek seferde salt okunur yapar.
- Tamsayı ile para: Kayan noktalı sayılar yuvarlama hatası yapar; tutarı kuruş cinsinden tamsayı olarak saklayın.
- Değer karşılaştırması: Aynı sınıftan iki nesneyi == ile karşılaştırmak tüm özellik değerlerini karşılaştırır; değer nesnelerinde önemli olan kimlik değil değerdir.
Örnek kod
Teoriyi somutlaştırmak için kısa bir PHP örneğine bakalım:
final readonly class Para
{
public function __construct(
public int $kurus,
public string $birim = 'TRY',
) {
if ($kurus < 0) throw new InvalidArgumentException('Tutar negatif olamaz.');
}
public function topla(Para $diger): self
{
if ($diger->birim !== $this->birim) throw new LogicException('Para birimleri farklı.');
return new self($this->kurus + $diger->kurus, $this->birim);
}
public function bicimli(): string
{
return number_format($this->kurus / 100, 2, ',', '.') . ' ' . $this->birim;
}
}
$sepet = (new Para(12_990))->topla(new Para(4_550));
echo $sepet->bicimli(); // 175,40 TRY
// $sepet->kurus = 0; // Error: Cannot modify readonly property Para::$kurusKodu doğrudan kopyalamak yerine her satırın ne yaptığını anlayarak uyarlamanız, ileride çıkacak hataları çözmeyi kolaylaştırır.
PHP 8 ile gelen match ifadesi ve isimli argümanlar, uzun switch ve parametre listelerini daha okunur hâle getirir.
Size ne kazandırır?
PHP readonly Özellikler ile Değişmez Değer Nesneleri konusunu doğru uygulamanın başlıca kazanımları şunlar:
- Nesne bir kez doğrulanır, her yerde güvenle kullanılır
- Yan etkiden kaynaklanan hatalar ortadan kalkar
- Kod, iş kurallarını kendi kendine belgeler
Özetle
PHP readonly Özellikler ile Değişmez Değer Nesneleri konusunda ele aldığımız 5 nokta, günlük çalışmada en sık ihtiyaç duyulan kısmı kapsıyor. Özellikle Kurucuda doğrulama ve Değer karşılaştırması başlıklarını uygulamaya geçirmek iyi bir başlangıç olur.
İlgili içerikler:
- MySQL İndeksleri ile Sorgu Hızlandırma
- Tailwind CSS ile Titreşimsiz Dark Mode
- JavaScript Fetch API ve async/await ile Veri Çekme
Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.
Yazar
Ferdi Giden @adminPHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.