Č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::.