2010-01-26 5 views
43

Im créer une fonction de journal qui enregistrera mes erreurs dans un fichier.obtenir la classe et la méthode actuelles?

je pensais qu'il contiendra quelle classe et méthode l'erreur est survenue dans.

est-il un moyen de l'exploitation forestière dans quelle classe et méthode l'erreur est survenue dans donc je ne dois taper manuellement à chaque fois?

+0

Vous voudrez peut-être fournir plus d'informations au sujet de votre classe enregistreur et comment vous avez l'intention de l'appeler. – Gordon

Répondre

65

Je ne suis pas grand sur PHP mais je crois qu'il a des "constantes magiques" similaires au C/C++. Jetez un oeil here: Cela semble indiquer que vous pouvez utiliser

__LINE__, __FILE__, __FUNCTION__, __CLASS__, and __METHOD__ 
+1

Si elle est appelée dans la déclaration de classe parente d'une fonction, elle renvoie le parent, et non la classe étendue. – paullb

+1

Vous pouvez trouver toutes les constantes prédéfinies ici: http://php.net/manual/fr/language.constants.predefined. php – Ramazan

5

get_called_class() obtenir la classe actuelle. Cela pourrait aussi être intéressant: debug_print_backtrace().

+0

pas vrai. C'est la classe de liaison statique tardive. – Gordon

+0

Vous avez raison, j'ai oublié le contexte parce que je l'ai juste utilisé demain. Mais pourrait être intéressant de toute façon? – Thomas

5

utiliser la constante __METHOD__ dans PHP5

35

Dans le cas où votre dans une classe parent/base, __CLASS__ retourne le nom de classe parent/base qui n'est pas désiré. Dans ce cas, vous pouvez utiliser get_class():

get_class($this) 
+4

Cela ne fonctionnera pas dans un environnement statique! –

+0

Cela obtient la classe enfant même si vous êtes dans une méthode définie dans le parent. – paullb

3

Dans les versions PHP actuelles (5.5+), vous devez utiliser static::class

Il fonctionne aussi bien dans les méthodes statiques et d'instance et renvoie le nom de la classe réelle, même si la méthode le corps a été défini dans une superclasse.

+0

En PHP 7.1 si le corps de la méthode a été défini dans une superclasse, static :: class renvoie le nom de la superclasse – g4b0

+0

@ g4b0 non, ce n'est pas le cas. Je viens de tester ce script avec PHP 7.1.8: 'classe A {fonction f() {return static :: classe;}} la classe B étend A {} $ b = new B; echo $ b-> f(); 'et il imprime correctement B, même si la méthode a été définie dans A. – Tobia

+0

Ne pas oublier la différence entre' self' et 'static'. 'static' se référera à la classe sur laquelle il est appelé alors que' self' est la classe dans laquelle il a été créé. – skerit

1

Dans Laravel 5 CLASS renvoyait l'espace de noms et le nom de classe, donc c'était une grande chaîne. Voilà donc comment vous obtenez la classe actuelle, sans tout ce que d'autres choses:

echo (new \ReflectionClass($this))->getShortName(); 
Questions connexes