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 la valeur 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 :
class Action {
public static function n() {
return get_called_class();
}
}
class MyAction extends Action {
}
echo MyAction::n(); // Outputs "MyAction"
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 :
class Action {
public function n() {
echo get_class($this);
}
}
class MyAction extends Action {
}
$foo = new MyAction;
$foo->n(); // Outputs "MyAction"
Conclusion :
Les liaisons statiques tardives et get_class($this) offrent des solutions pour récupérer le nom de classe à partir d'un appel de méthode statique dans un classe élargie. 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.
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