Sobes.tech
Middle+

Co je to pozdní statické vázání v PHP?

sobes.tech AI

Odpověď od AI

Tento mechanismus umožňuje odkazovat na volanou třídu v kontextu statických volání. Řeší problém s auto-referencemi v děděných třídách při použití klíčového slova static::.

Podívejme se na příklad s použitím self:::

<?php
class A {
    public static function who() {
        echo __CLASS__; // Vypíše A
    }
    public static function test() {
        self::who(); // Zavolá A::who()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__; // Vypíše B
    }
}

B::test(); // Vypíše A

V tomto případě self::who() uvnitř třídy A vždy zavolá metodu who třídy A, i když volání test() pochází z třídy B.

Nyní se podívejme na příklad s static:::

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Zavolá who() třídy, která inicializovala volání test()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Vypíše B

Zde static::who() uvnitř třídy A při volání z třídy B odkazuje na třídu B a zavolá metodu who() třídy B.

Pozdní statické vazby umožňují dynamicky určit, kterou třídu použít v kontextu statického volání, v závislosti na tom, která třída byla skutečně volána. To je obzvláště užitečné při práci s hierarchiemi tříd a statickými metodami, které by měly chovat polymorfně. Funguje to tím, že si pamatuje "nepřesměrovanou volanou třídu" (poslední třídu v řetězci dědičnosti, ze které začalo statické volání) a používá ji k řešení odkazů static::.