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