Sobes.tech
Middle+

Čo je oneskorené statické viazanie v PHP?

sobes.tech AI

Odpoveď od AI

Tento mechanizmus umožňuje odkazovať na volanú triedu v kontexte statických volaní. Rieši problém s auto-referenciami v dediacej triede pri použití kľúčového slova static::.

Pozrime sa na prí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 prípade self::who() v triede A vždy zavolá metódu who z triedy A, aj keď volanie test() pochádza z triedy B.

Teraz si pozrime príklad s static:::

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Zavolá who() z triedy, ktorá iniciovala volanie test()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

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

Tu, static::who() v triede A pri volaní z triedy B sa bude odkazovať na triedu B a zavolá metódu who() z triedy B.

Neskoré statické viazanie umožňuje dynamicky určiť, ktorú triedu použiť v kontexte statického volania, v závislosti od toho, ktorá trieda bola skutočne volaná. To je obzvlášť užitočné pri práci s hierarchiami tried a statickými metódami, ktoré by sa mali správať polymorfným spôsobom. Funguje tak, že si pamätá "nepresmerovanú volanú triedu" (poslednú triedu v reťazci dedičnosti, od ktorej začalo statické volanie) a používa ju na vyriešenie odkazov static::.