Maison  >  Article  >  développement back-end  >  Comment récupérer le nom de la classe à partir d’un appel de méthode statique dans les classes PHP étendues ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 21:53:30891parcourir

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

Récupération du nom de classe à partir d'un appel statique dans une classe PHP étendue

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

<code class="php">class Action {
    function n() {/* some implementation */}
}

class MyAction extends Action {/* further implementation */}</code>

Dans cette situation, appeler MyAction::n(); devrait renvoyer "MyAction" comme nom de classe. Cependant, la variable __CLASS__ renvoie uniquement le nom de la classe parent ("Action").

Liaisons statiques tardives (PHP 5.3) :

PHP 5.3 a introduit les liaisons statiques tardives, qui permettent de résoudre la classe cible au moment de l’exécution. Cette fonctionnalité permet de déterminer la classe appelée à l'aide de la fonction get_call_class() :

<code class="php">class Action {
    public static function n() {
        return get_called_class();
    }
}

class MyAction extends Action {

}

echo MyAction::n(); // Output: MyAction</code>

Approche alternative (Pré-PHP 5.3) :

Avant PHP 5.3, une solution alternative repose sur l'utilisation d'une méthode non statique et de la fonction get_class() :

<code class="php">class Action {
    public function n(){
        return get_class($this);
    }
}

class MyAction extends Action {

}

$foo = new MyAction;

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

N'oubliez pas que cette approche ne fonctionne que pour les méthodes non statiques, car la fonction get_class() prend une instance de la classe comme argument.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn