Šta je kasno statičko povezivanje u PHP-u?
sobes.tech АИ
Одговор од АИ
Механизам који омогућава да се позове позвани клас у контексту статичних позива. Решава проблем са самореференцама у наслеђеним класовима при коришћењу кључне речи static::.
Погледајмо пример са коришћењем self:::
<?php
class A {
public static function who() {
echo __CLASS__; // Исписа A
}
public static function test() {
self::who(); // Позива A::who()
}
}
class B extends A {
public static function who() {
echo __CLASS__; // Исписа B
}
}
B::test(); // Исписа A
У овом случају, self::who() у класи A увек ће позвати метод who из класе A, чак и ако позив test() долази из класе B.
Сада да видимо пример са static:::
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // Позваће who() из класе која је иницирала позив на test()
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); // Исписа B
Овде, static::who() у класи A када се позове из класе B ће се односити на класу B и позвати метод who() из класе B.
Касно статичко везивање омогућава да се динамички одреди која класа ће се користити у контексту статичког позива, у зависности од тога која је класа заправо позвана. Ово је посебно корисно при раду са хијерархијама класа и статичким методама које треба да се понашају полиморфно. Ради тако што памти "непренасмерену позвану класу" (крајњу класу у ланцу наслеђивања од које је почео статички позив) и користи је за решавање static:: референци.