"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como obter o nome da classe de uma classe PHP estendida em uma chamada de método estático?

Como obter o nome da classe de uma classe PHP estendida em uma chamada de método estático?

Publicado em 2024-11-10
Navegar:267

How to Get the Class Name from an Extended PHP Class in a Static Method Call?

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.

Tutorial mais recente Mais>

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