Kas yra vėlyvasis statinis susiejimas PHP?
sobes.tech AI
Atsakymas iš AI
Tai mechanizmas, leidžiantis nuorodą į iškvietusį klasę statinių iškvietimų kontekste. Jis sprendžia problemą, susijusią su savireferencijomis paveldimuose klasėse naudojant raktinį žodį static::.
Pažiūrėkime pavyzdį su self:::
<?php
class A {
public static function who() {
echo __CLASS__; // Išves A
}
public static function test() {
self::who(); // Iškvies A::who()
}
}
class B extends A {
public static function who() {
echo __CLASS__; // Išves B
}
}
B::test(); // Išves A
Šiuo atveju self::who() klasėje A visada iškvies who metodą iš A, net jei test() iškviečiama iš B klasės.
Dabar pažiūrėkime pavyzdį su static:::
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // Iškvies `who()` iš klasės, kuri inicijavo `test()` iškvietimą
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); // Išves B
Čia static::who() klasėje A, iškviečiama iš B klasės, nuoroda bus į B ir iškvies who() metodą iš B.
Vėlyvasis statinis ryšys leidžia dinamiškai nustatyti, kurią klasę naudoti statinio iškvietimo kontekste, priklausomai nuo to, kuri klasė iš tikrųjų buvo iškviesta. Tai ypač naudinga dirbant su klasių hierarchijomis ir statiniais metodais, kurie turi elgtis polimorfiškai. Jis veikia įsimenant "neperadresuotą iškvietimo klasę" (galutinę klasę iš paveldėjimo grandinės, iš kurios prasidėjo statinis iškvietimas) ir naudojant ją nuorodoms static::.