Sobes.tech
Middle+

Czym jest późne wiązanie statyczne w PHP?

sobes.tech AI

Odpowiedź od AI

Ten mechanizm pozwala na odwoływanie się do wywoływanej klasy w kontekście wywołań statycznych. Rozwiązuje problem związany z auto-referencjami w klasach dziedziczących przy użyciu słowa kluczowego static::.

Rozważmy przykład z użyciem self:::

<?php
class A {
    public static function who() {
        echo __CLASS__; // Wyświetli A
    }
    public static function test() {
        self::who(); // Wywoła A::who()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__; // Wyświetli B
    }
}

B::test(); // Wyświetli A

W tym przypadku self::who() w klasie A zawsze wywoła metodę who z klasy A, nawet jeśli wywołanie test() pochodzi z klasy B.

Teraz rozważmy przykład z użyciem static:::

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Wywoła who() z klasy, która zainicjowała wywołanie test()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Wyświetli B

Tutaj, static::who() w klasie A wywołane z klasy B będzie odwoływać się do klasy B i wywoła metodę who() z klasy B.

Opóźnione wiązanie statyczne pozwala na dynamiczne określenie, którą klasę użyć w kontekście wywołania statycznego, w zależności od tego, która klasa została faktycznie wywołana. Jest to szczególnie przydatne przy pracy z hierarchiami klas i statycznymi metodami, które mają zachowywać się polimorficznie. Działa poprzez zapamiętanie "nieprzekierowanej wywołanej klasy" (ostatniej klasy w łańcuchu dziedziczenia, od której rozpoczęło się wywołanie statyczne) i użycie jej do rozwiązywania odwołań static::.