Özet - Static üyeler
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
-
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.
-
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); } }