Sobes.tech
Middle+

PHP-də gec statik bağlama nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Bu mexanizm statik çağrıların kontekstində çağrılan sinfə istinad etməyə imkan verir. static:: açar sözündən istifadə edərkən irsi siniflərdə öz-özünə istinad problemlərini həll edir.

Gəlin self:: istifadə edən nümunəyə baxaq:

<?php
class A {
    public static function who() {
        echo __CLASS__; // A-nı göstərəcək
    }
    public static function test() {
        self::who(); // A::who() çağıracaq
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__; // B-ni göstərəcək
    }
}

B::test(); // A-nı göstərəcək

Bu halda, self::who() A sinfi daxilində həmişə A sinfinin who metodunu çağıracaq, hətta test() çağırışı B sinfindən olsa belə.

İndi static:: istifadə edən nümunəyə baxaq:

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Çağıran sinfin `who()` metodunu çağıracaq
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // B-ni göstərəcək

Burada, static::who() A sinfi daxilində B sinfindən çağırıldıqda, B sinfinə istinad edəcək və B sinfinin who() metodunu çağıracaq.

Gecikmiş statik bağlama, hansı sinfin istifadə ediləcəyini dinamik olaraq müəyyən etməyə imkan verir və bu, faktiki çağırılan sinfə bağlıdır. Bu, sinif hiyerarşiləri və polimorf davranış göstərməli olan statik metodlar ilə işləyərkən xüsusilə faydalıdır. Bu, static:: üçün həll etmək üçün çağırılan "çağırılmayan sinfi" (statik çağırışın başladığı son sinfi) yadda saxlayır və istifadə edir.