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