"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 obtenir le nom de classe d’une classe PHP étendue dans un appel de méthode statique ?

Comment obtenir le nom de classe d’une classe PHP étendue dans un appel de méthode statique ?

Publié le 2024-11-10
Parcourir:484

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

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.

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