Comment obtenir le nom de la fonction dans une fonction en PHP?

235

C'est possible?

function test()
{
  echo "function name is test";
}
OMG
la source
1
Par simple curiosité, quand est-ce nécessaire? Est-il possible de créer des fonctions dont vous ne connaissez pas le nom?
DisgruntledGoat
37
Une utilisation possible consisterait à enregistrer votre exécution. Si vous écrivez "J'ai eu une erreur dans". FONCTION vers un fichier journal ou quelque chose. De cette façon, si le nom de la fonction est modifié, vous n'avez pas à vous soucier de la personne qui se souvient de modifier le message du journal.
Brian Ramsay
1
J'avais besoin de ça pour me connecter! merci d'avoir posé la question :)
SublymeRick
2
Également utile si vous souhaitez utiliser le nom de la fonction à l'intérieur de la fonction (pour une autre utilisation). Comme construire des liens basés sur la fonction, etc. (par exemple: function name1()puis utiliser à nouveau name1 à l'intérieur), gagnerait beaucoup de temps si vous avez le même modèle pour de nombreuses fonctions.
Mafia
1
@DisgruntledGoat: il est utile si vous créez des fonctions manuellement et ne souhaitez pas éditer de message d'erreur pour chaque fonction. L'ajouter dans un message d'erreur signifie que vous avez moins de travail.
John Boe

Réponses:

390

La manière précise consiste à utiliser le __FUNCTION__ constante magique prédéfinie .

Exemple:

class Test {
    function MethodA(){
        echo __FUNCTION__;
    }
}

Résultat: MethodA.

Silfverstrom
la source
6
FUNCTION fonctionne également pour les fonctions non classées. Testé sur PHP 7.0.8.
mvsagar
De la même manière, comment obtenir le nom de la classe?
Kiran Reddy
2
@KiranReddy Il y a une constante magique pour cela aussi: __CLASS__. Ou vous pouvez le faire get_class($this).
Sean the Bean
1
Testé sur PHP> = 4
Nabi KAZ
98

Vous pouvez utiliser les constantes magiques __METHOD__ (inclut le nom de la classe) ou __FUNCTION__(juste le nom de la fonction) selon qu'il s'agit d'une méthode ou d'une fonction ... =)

PatrikAkerstrand
la source
42
MÉTHODE inclut le nom de classe, FONCTION est juste cela. Ce dernier est également disponible dans la méthode d'une classe.
Alister Bulman
3
C'est vrai. Mais il est souvent utile d'obtenir MyClass :: methodName au lieu de methodName.
PatrikAkerstrand
16

Si vous utilisez PHP 5, vous pouvez essayer ceci:

function a() {
    $trace = debug_backtrace();
    echo $trace[0]["function"];
}
Kevin Newman
la source
14
C'est une ressource incroyable. L'utilisation de FUNCTION ou METHOD est beaucoup plus efficace. debug_backtrace () est idéal si vous avez besoin de plus que le nom de la fonction.
Luke Cousins
2
C'est une mauvaise pratique d'utiliser debug_backtrace () à cet effet
Marcio Mazzucato
1
C'EST LA SEULE FAÇON CORRECTE que j'ai trouvée !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!! car __FUNCTION__renvoie le nom de la fonction parent (lorsque la fonction actuelle est incluse dans la fonction parent)
T.Todua
5
@tazo todua. Pouvez-vous donner un exemple?
alds
2
<?php

  class Test {
     function MethodA(){
         echo __FUNCTION__ ;
     }
 }
 $test = new Test;
 echo $test->MethodA();
?>

Résultat: "MethodA";

Snehal K
la source
Bien que cet extrait de code puisse être la solution, y compris une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondrez à la question pour les lecteurs à l'avenir, et ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
SilverNak