"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment récupérer le nom de classe à partir d'un appel de méthode statique dans des classes PHP étendues?

Comment récupérer le nom de classe à partir d'un appel de méthode statique dans des classes PHP étendues?

Publié le 2025-03-22
Parcourir:779

How to retrieve the class name from a static method call in extended PHP classes?

Récupération du nom de classe à partir de l'appel statique dans une classe php étendue

dans le monde de PHP, il est souvent nécessaire de déterminer le nom de classe d'un appel de fonction statique, en particulier lorsque vous travaillez avec des classes étendues. Considérez le scénario suivant:

class Action {
    function n() {/* some implementation */}
}

class MyAction extends Action {/* further implementation */}

Dans cette situation, appelant myAction :: n (); devrait retourner "myAction" comme nom de classe. Cependant, la variable __class__ renvoie uniquement le nom de la classe parent ("Action").

Bindings statiques tardifs (php 5.3):

php 5.3 a introduit des liaisons statiques tardives, qui permettent de résoudre la classe cible à l'exécution. Cette fonctionnalité permet de déterminer la classe appelée à l'aide de la fonction get_called_class ():

class Action {
    public static function n() {
        return get_called_class();
    }
}

class MyAction extends Action {

}

echo MyAction::n(); // Output: MyAction

approche alternative (pre-php 5.3):

avant php 5.3, une solution alternative repose sur une méthode non statique et la fonction get_class ():

class Action {
    public function n(){
        return get_class($this);
    }
}

class MyAction extends Action {

}

$foo = new MyAction;

echo $foo->n(); // Output: MyAction

rappelez-vous, cette approche ne fonctionne que pour les méthodes non statiques, car la fonction get_class () prend une instance de la classe comme argument.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3