public class MyClass {
}
En Java, nous pouvons obtenir le nom de la classe avec String className = MyClass.class.getSimpleName();
Comment faire cela en PHP? Je sais déjà get_class()
, mais cela ne fonctionne que pour les objets. Actuellement, je travaille dans Active Record. J'ai besoin d'une déclaration comme MyClass::className
.
public $__CLASS__ = __CLASS__;
danse avec toutes les autres classes ...Réponses:
Depuis PHP 5.5, vous pouvez utiliser la résolution de nom de classe via ClassName :: class .
Voir les nouvelles fonctionnalités de PHP5.5 .
Si vous souhaitez utiliser cette fonctionnalité dans votre méthode de classe, utilisez static :: class :
Pour les anciennes versions de PHP , vous pouvez utiliser get_class () .
la source
static::class
etget_class_name()
?static::class
soit résolu pendant la compilation alors qu'ilget_class_name()
est interprété pendant l'exécution. Je trouve cela en essayant d'accéder à la propriété :: classe d'une classe générée dynamiquement et obtenir l'erreur suivante (?):Dynamic class names are not allowed in compile-time ::class fetch
. Voir cette réponse pour plus de détails. J'ai également trouvé cette note de la documentation utile.Vous pouvez utiliser
__CLASS__
dans une classe pour obtenir le nom.http://php.net/manual/en/language.constants.predefined.php
la source
get_class($this)
,static::class
) retourne simplement le nom de la classe enfant (qui étend le parent).self::class
aussi, semble renvoyer le nom de la classe parente.On dirait que vous avez répondu à votre propre question.
get_class
vous obtiendrez le nom de la classe. C'est procédural et c'est peut-être ce qui cause la confusion. Jetez un œil à la documentation php pourget_class
Voici leur exemple:
Pour que cela ressemble davantage à votre exemple, vous pouvez faire quelque chose comme:
Maintenant vous pouvez faire:
Ceci est quelque peu limité, cependant, car si ma classe est étendue, elle retournera toujours «MyClass». Nous pouvons utiliser à la
get_called_class
place, qui repose sur la liaison statique tardive , une fonctionnalité relativement nouvelle, et nécessite PHP> = 5.3.la source
Maintenant, j'ai la réponse à mon problème. Merci à Brad pour le lien, je trouve la réponse ici . Et merci à J.Money pour l'idée. Ma solution:
la source
FooBar::getClassName()
est toujours'FooBar'
. Si vous pouviez taperProduct::getClassName()
, vous pourriez aussi taper à la'Product'
place.Pour obtenir le nom de la classe, vous pouvez utiliser ReflectionClass
la source
Il semble que
ReflectionClass
c'est une option assez productive.Référence:
la source
Je pense qu'il est important de mentionner peu de différence entre «soi» et «statique» en PHP, car la «meilleure réponse» utilise «statique», ce qui peut donner des résultats déroutants pour certaines personnes.
Résultats:
la source
end(preg_split("#(\\\\|\\/)#", Class_Name::class))
Class_Name::class
: renvoie la classe avec l'espace de noms. Donc, après avoir seulement besoin de créer un tableau, obtenez la dernière valeur du tableau.la source
pour les versions antérieures à PHP 5.5
la source
la source