Maison > Article > développement back-end > Comment obtenir le nom de classe d’une classe PHP étendue dans un appel de méthode statique ?
Obtention du nom de classe à partir d'un appel statique de classe PHP étendu
Dans la programmation orientée objet, les classes étendent souvent les classes de base pour hériter et étendre leurs fonctionnalités . Un scénario courant implique la nécessité d'obtenir le nom de la classe à partir d'un appel de méthode statique dans une classe étendue, malgré le fait que CLASS renvoie toujours le nom de la classe de définition.
Problème : inaccessibilité du nom de classe dans les méthodes statiques parent
Considérons un scénario avec deux classes, Action et MyAction, où MyAction étend Action. Action définit une méthode statique, n(), qui est inaccessible via la constante CLASS dans les méthodes statiques parentes, ce qui donne CLASS la valeur étant définie sur "Action" quelle que soit la classe appelante.
Solutions :
1. Liaisons statiques tardives (PHP 5.3) :
Les liaisons statiques tardives vous permettent de déterminer la classe cible d'un appel de méthode statique au moment de l'exécution plutôt que lorsque la méthode est définie. Ceci est réalisé à l'aide de la fonction get_call_class(), qui renvoie le nom de la classe dans laquelle la méthode statique a été appelée.
Par exemple :
<code class="php">class Action { public static function n() { return get_called_class(); } } class MyAction extends Action { } echo MyAction::n(); // Outputs "MyAction"</code>
2. Utilisation de get_class($this) (méthodes non statiques uniquement) :
Si la méthode en question n'est pas statique, vous pouvez utiliser get_class($this) pour obtenir la classe nom à partir duquel la méthode a été appelée.
Par exemple :
<code class="php">class Action { public function n() { echo get_class($this); } } class MyAction extends Action { } $foo = new MyAction; $foo->n(); // Outputs "MyAction"</code>
Conclusion :
Les liaisons statiques tardives et get_class($this) proposer des solutions pour récupérer le nom de classe à partir d’un appel de méthode statique dans une classe étendue. Les liaisons statiques tardives sont préférables pour les méthodes statiques, tandis que get_class($this) est utile pour les méthodes non statiques.
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!