İçeriğe atla
FerdiGidenby FerdiSoftBETA v2.4
Web Geliştirme

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.

Ferdi GidenFerdi Giden 2 dk okuma 8
PHP readonly Özellikler ile Değişmez Değer Nesneleri
İçindekiler
  1. PHP readonly Özellikler ile Değişmez Değer Nesneleri nedir, neden önemlidir?
  2. Bilmeniz gereken 5 temel nokta
  3. Örnek kod
  4. Size ne kazandırır?
  5. Özetle

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::$kurus

Kodu 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:

Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.

Paylaş:
Ferdi Giden

Yazar

Ferdi Giden @admin
Sistem YöneticisiDoğrulanmış GeliştiriciBeta KullanıcıFerdiSoft KatılımcısıDoğrulanmış ProfilGüvenlik Bilinci

PHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.

Yorumlar 0

Yorum yapmak ve tartışmaya katılmak için giriş yapın. Rozetleriniz yorumlarınızda görünür.

Henüz yorum yok. İlk yorumu siz yazın!

İlgili yazılar

Tüm yazılar
Ücretsiz Teklif Al