Sobes.tech
Middle+

PHP'de geç statik bağlama nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bu mekanizma, statik çağrılar bağlamında çağrılan sınıfa referans vermeyi sağlar. static:: anahtar kelimesi kullanılırken kalıtımlı sınıflarda öz-yinelemeleriyle ilgili sorunu çözer.

self:: kullanımıyla bir örnek görelim:

<?php
class A {
    public static function who() {
        echo __CLASS__; // A'yı yazdırır
    }
    public static function test() {
        self::who(); // A::who()'yu çağırır
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__; // B'yi yazdırır
    }
}

B::test(); // A'yı yazdırır

Bu durumda, self::who() sınıf A içinde her zaman A sınıfının who metodunu çağırır, test() çağrısı B sınıfından olsa bile.

Şimdi static:: kullanımıyla bir örneğe bakalım:

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // çağrıyı başlatan sınıfın who() metodunu çağırır
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // B'yi yazdırır

Burada, static::who() sınıf A içinde, B sınıfından çağrıldığında, B sınıfına referans verir ve B sınıfının who() metodunu çağırır.

Gecikmeli statik bağlama, hangi sınıfın kullanılacağını dinamik olarak belirlemeye olanak tanır ve bu, gerçek çağrılan sınıfa bağlıdır. Bu, sınıf hiyerarşileri ve polimorfik davranması gereken statik metodlar ile çalışırken özellikle faydalıdır. Bu, çağrılan "çağrılmayan sınıf" (statik çağrının başladığı son sınıf) hatırlanıp, static:: referanslarının çözümünde kullanılmasıyla çalışır.