Sobes.tech
Middle+

O que é ligação estática tardia em PHP?

sobes.tech IA

Resposta da IA

Este mecanismo permite referenciar a classe chamada no contexto de chamadas estáticas. Resolve o problema relacionado com autorreferências em classes herdadas ao usar a palavra-chave static::.

Vamos ver um exemplo usando self:::

<?php
class A {
    public static function who() {
        echo __CLASS__; // Vai imprimir A
    }
    public static function test() {
        self::who(); // Vai chamar A::who()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__; // Vai imprimir B
    }
}

B::test(); // Vai imprimir A

Neste caso, self::who() dentro da classe A sempre chamará o método who da classe A, mesmo que a chamada a test() venha da classe B.

Agora vejamos um exemplo com static:::

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Vai chamar who() da classe que iniciou a chamada a test()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Vai imprimir B

Aqui, static::who() dentro da classe A ao ser chamado a partir da classe B referenciará a classe B e chamará o método who() da classe B.

A ligação estática tardia permite determinar dinamicamente qual classe usar no contexto de uma chamada estática, dependendo de qual classe foi realmente chamada. Isto torna-se especialmente útil ao trabalhar com hierarquias de classes e métodos estáticos que devem comportar-se de forma polimórfica. Funciona ao recordar a "classe não redirecionada chamada" (a classe final na cadeia de herança de onde a chamada estática começou) e usá-la para resolver as referências static::.