CodeBlanks Logo Icon CodeBlanks

Özet - Static üyeler

PHP kursu · Orta seviye · Ders 35/115

static property, method ve self::'le sayaç sınıfı yazarsın.

Özet - Static üyeler

Bu grupta static üyeleri öğrendin. static property sınıfa ait paylaşılan durumdur (Counter::$count); static method örneğe gerek kalmadan çağrılır (MathHelper::square(4)).

Sınıf içinde static üyelere self:: ile erişirsin; bu, sınıf adını sabit yazmaktan güvenlidir. self:: kodun yazıldığı sınıfa bağlanır; static:: ise çağrılan sınıfa bağlanır (geç bağlama).

Örnek: bir Counter sınıfında self::$count++ yapıcı içinde örnek sayısını tutar; static::class miras alınan methodda alt sınıfın adını verir.

Uygulama Counter sınıfı: static property ve self::

Bir Counter sınıfı tanımla. public static int $count = 0 property olsun. Yapıcı metot self::$count++ yapsın. public static function getCount(): int return self::$count döndürsün. public static function reset(): void self::$count = 0 yapsın. Üç kez new Counter() çağır, echo Counter::getCount() . "\n" yaz, sonra Counter::reset() çağır, tekrar echo Counter::getCount() . "\n" yaz.

Örnek çözümü göster
:$count++ yap. static function getCount(): int { return self::$count; } ve static function reset(): void { self::$count = 0; } ekle. Üç kez new Counter(), echo Counter::getCount(), Counter::reset(), echo Counter::getCount() çağır.
Örnek çözüm:
<?php
// Özet: static sayaç sınıfı
class Counter {
    public static int $count = 0;
    public function __construct() {
        self::$count++;
    }
    public static function getCount(): int {
        return self::$count;
    }
    public static function reset(): void {
        self::$count = 0;
    }
}
new Counter();
new Counter();
new Counter();
echo Counter::getCount() . "\n";
Counter::reset();
echo Counter::getCount() . "\n";

Static üyelerde iyi pratikler

Static üyeleri kullanırken birkaç iyi pratik: static property'leri küçük ve öngörülebilir tut; test sırasında mutlaka sıfırla. Büyük global durum karmaşayı artırır.

Instance durumu gerekiyorsa static değil instance kullan. Static methodlar polymorphism'i desteklemediği için alt sınıflar farklı davranamayabilir; bu durumda static:: ile geç bağlama bir çıkış yolu olabilir.

Yaygın örüntüler: Singleton (tek örnek), Registry (ad-değer havuzu), Factory (new static() ile çağrılan sınıfın örneği). Bunları dikkatli ve gerektiği yerde kullan.

Uygulama LSB örneği: Shape ve Circle

Bir Shape sınıfı tanımla. public static function create(): static methodu return new static() döndürsün. public function name(): string methodu return static::class döndürsün. Sonra class Circle extends Shape {} boş alt sınıfı ekle. $s = Circle::create() ile örnek oluştur, echo $s->name() . "\n" yaz. Beklenen çıktı Circle'dır.

Örnek çözümü göster
static { return new static(); } ve function name(): string { return static::class; } tanımla. class Circle extends Shape {} ekle. $s = Circle::create(); echo $s->name() . "\n"; yaz.
Örnek çözüm:
<?php
// LSB örneği: Shape ve Circle
class Shape {
    public static function create(): static {
        return new static();
    }
    public function name(): string {
        return static::class;
    }
}
class Circle extends Shape {}
$s = Circle::create();
echo $s->name() . "\n";

Kendini test et

  1. Static üyelerle ilgili hangisi doğrudur?

    • static property her örneğe özeldir
    • static method içinde $this kullanılır
    • self:: kodun yazıldığı sınıfa referans verir
    • static:: her zaman ebeveyn sınıfı verir
    Cevabı göster

    self:: kodun yazıldığı sınıfa referans verir — Doğru. self:: kodun yazıldığı sınıfa bağlanır; static:: ise çağrılana.

  2. LSB: new static() çağrısı

    class Product {
        public string $name;
        public function __construct(string $name) {
            $this->name = $name;
        }
        public static function create(string $name): static {
            return new ____
        }
    }
    Cevabı göster
    class Product {
        public string $name;
        public function __construct(string $name) {
            $this->name = $name;
        }
        public static function create(string $name): static {
            return new static($name);
        }
    }

Orta seviye bölümündeki tüm dersler