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

DDD
Libérer: 2024-10-30 05:58:02
original
188 Les gens l'ont consulté

How Can I Retrieve the Subclass Name from a Static Method Call in Extended PHP Classes?

Comment récupérer le nom de classe à partir d'appels statiques dans des classes PHP étendues

En génie logiciel, l'héritage permet aux classes d'hériter des propriétés et des fonctionnalités de leurs classes de parents. En PHP, lorsque vous étendez une classe avec des sous-classes, vous pouvez accéder aux propriétés et méthodes définies dans la classe parent. Cependant, accéder au nom de la sous-classe à partir d'une méthode statique dans la classe parent peut être difficile.

Problème :

Supposons que vous ayez une classe parent Action et un sous-classe MyAction qui hérite d'Action. Vous souhaitez développer une méthode dans la classe Action qui renvoie le nom de la sous-classe lorsqu'elle est appelée statiquement depuis la sous-classe. Cependant, l'utilisation de la variable __CLASS__ dans la classe parent renvoie toujours le nom de la classe parent, ce qui n'est pas le résultat souhaité.

Solution 1 : liaisons statiques tardives (PHP 5.3) :

PHP 5.3 a introduit des liaisons statiques tardives, qui résolvent la classe cible pour les appels de méthodes statiques au moment de l'exécution plutôt que pendant la définition. Cette fonctionnalité permet d'utiliser la fonction get_call_class(), qui récupère le nom de la classe à partir de laquelle une méthode statique est invoquée.

Par exemple :

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

class MyAction extends Action {

}

echo MyAction::n(); //displays MyAction</code>
Copier après la connexion

Dans cet exemple, le La fonction get_call_class() renvoie le nom de la sous-classe MyAction, même si la méthode est définie dans la classe parent Action. Cette approche fournit une solution simple au problème.

Solution 2 : Récupération dynamique du nom de classe (PHP 5.2) :

Bien que les liaisons statiques tardives ne soient pas disponibles dans les versions PHP avant la version 5.3, il existe une méthode alternative pour récupérer dynamiquement le nom de la classe :

<code class="php">class Action {
    public function n() {
        $object = new ReflectionObject($this);
        return $object->getName();
    }
}

class MyAction extends Action {

}

$myAction = new MyAction();
echo $myAction->n(); //displays MyAction</code>
Copier après la connexion

Dans cette approche, nous créons une instance ReflectionObject pour l'objet actuel et utilisons la méthode getName() pour récupérer le nom de la classe . Cette solution fonctionne dans les versions PHP remontant à 5.2 mais nécessite une étape supplémentaire de création d'un objet de réflexion.

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
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!