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