Obtendo o nome da classe a partir da chamada estática de classe PHP estendida
Na programação orientada a objetos, as classes geralmente estendem as classes base para herdar e estender sua funcionalidade . Um cenário comum envolve a necessidade de obter o nome da classe a partir de uma chamada de método estático em uma classe estendida, apesar do fato de que CLASS sempre retorna o nome da classe definidora.
Problema: Inacessibilidade do nome da classe em métodos estáticos pais
Considere um cenário com duas classes, Action e MinhaAção, onde MinhaAção estende Ação. Action define um método estático, n(), que é inacessível por meio da constante CLASS dentro dos métodos estáticos pai, resultando na CLASS valor sendo definido como "Ação" independentemente da chamada classe.
Soluções:
1. Ligações estáticas tardias (PHP 5.3):
Ligações estáticas tardias permitem determinar a classe de destino de uma chamada de método estático em tempo de execução, e não quando o método é definido. Isso é feito usando a função get_called_class(), que retorna o nome da classe na qual o método estático foi chamado.
Por exemplo:
class Action {
public static function n() {
return get_called_class();
}
}
class MyAction extends Action {
}
echo MyAction::n(); // Outputs "MyAction"
2. Usando get_class($this) (somente métodos não estáticos):
Se o método em questão não for estático, você pode usar get_class($this) para obter a classe nome a partir do qual o método foi chamado.
Por exemplo:
class Action {
public function n() {
echo get_class($this);
}
}
class MyAction extends Action {
}
$foo = new MyAction;
$foo->n(); // Outputs "MyAction"
Conclusão:
As ligações estáticas tardias e get_class($this) oferecem soluções para recuperar o nome da classe de uma chamada de método estático em um aula estendida. Ligações estáticas tardias são preferíveis para métodos estáticos, enquanto get_class($this) é útil para métodos não estáticos.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3