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

Susan Sarandon
Libérer: 2024-11-01 10:10:29
original
997 Les gens l'ont consulté

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 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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!