Sobes.tech
Middle+

Š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:: референци.