DEV Community

Barış Bideratan
Barış Bideratan

Posted on

#2 PHP’de Final Sınıflar ve Readonly Sınıflar: Readonly Class

Readonly sınıflar, PHP 8.2 ile birlikte tanıtılan bir özelliktir. Readonly sınıflar, sınıfın tüm özelliklerinin (properties) yalnızca okunabilir olduğu ve yalnızca sınıfın oluşturulması (instantiation) sırasında atanabileceği anlamına gelir. Bu sınıflar, veri tutarlılığını sağlamak ve nesnelerin durumlarının değiştirilmesini önlemek için kullanılır.

Readonly Sınıflar Nedir?

Readonly sınıflar, tüm özelliklerin readonly olduğu sınıflardır. Bu, sınıfın tüm özelliklerinin sadece okunabilir olduğu ve oluşturulduktan sonra değiştirilemeyeceği anlamına gelir.

Readonly Sınıf Tanımlaması

Readonly sınıflar şu şekilde tanımlanır:

<?php
readonly class Point {
    public function __construct(
        public int $x,
        public int $y,
    ) {}
}

$point = new Point(10, 20);

// Özelliklere atama yapılabilir:
echo $point->x; // 10
echo $point->y; // 20

// Ancak özellikler değiştirilemez:
$point->x = 30; // Hata: Cannot modify readonly property Point::$x
?>
Enter fullscreen mode Exit fullscreen mode

Neden Readonly Sınıflara İhtiyaç Duyarız?

  1. Veri Tutarlılığı: Readonly sınıflar, bir nesnenin durumunun değişmesini önleyerek veri tutarlılığını sağlar. Bu, özellikle kritik sistemlerde ve önemli verilerin manipülasyonunun istenmediği durumlarda önemlidir.

  2. Güvenlik: Readonly sınıflar, nesnelerin durumunun değiştirilememesi gereken durumlarda güvenliği artırır. Bu, hatalı veya kötü niyetli kodun veri üzerinde değişiklik yapmasını önler.

  3. Kolay Anlaşılabilirlik: Readonly sınıflar, sınıfın kullanımını daha anlaşılır hale getirir. Bir sınıfın tüm özelliklerinin yalnızca okunabilir olduğunu bilmek, kodun nasıl çalıştığını anlamayı kolaylaştırır.

  4. Yan Etkiyi Azaltma: Nesnelerin durumunun değiştirilememesi, yan etkileri azaltır ve kodun daha tahmin edilebilir olmasını sağlar. Bu, özellikle fonksiyonel programlamada ve yan etkilerin minimumda tutulması gereken durumlarda faydalıdır.

Örnek Kullanım Senaryoları

  1. Koordinatlar veya Noktalar: Coğrafi koordinatlar gibi değişmemesi gereken verileri tutmak için kullanılabilir.
  2. Konfigürasyon Verileri: Uygulamanın çalışma süresince değişmemesi gereken konfigürasyon ayarlarını tutmak için kullanılabilir.
  3. Kimlik Bilgileri: Kullanıcı kimlik bilgileri gibi, değiştirilemez olması gereken verileri saklamak için kullanılabilir.

Readonly Sınıfların Alternatifleri

Readonly sınıflar kullanılmadan önce, benzer işlevselliği sağlamak için getter metotları ve özel setter metotları kullanılırdı. Ancak bu yöntemler, readonly sınıflar kadar doğrudan ve anlaşılır değildir.

<?php
class Point {
    private int $x;
    private int $y;

    public function __construct(int $x, int $y) {
        $this->x = $x;
        $this->y = $y;
    }

    public function getX(): int {
        return $this->x;
    }

    public function getY(): int {
        return $this->y;
    }
}

$point = new Point(10, 20);

// Özelliklere atama yapılabilir:
echo $point->getX(); // 10
echo $point->getY(); // 20

// Ancak özellikler değiştirilemez:
$point->x = 30; // Hata: Cannot access private property Point::$x
?>
Enter fullscreen mode Exit fullscreen mode

Top comments (0)