272 votes

Comment obtenir le nom de la fonction à l'intérieur d'une fonction en PHP?

Est-ce possible?

function test()
{
  echo "le nom de la fonction est test";
}

2 votes

Juste par curiosité, quand est-ce qu'on a besoin de cela? Est-il possible de créer des fonctions dont on ne connaît pas le nom?

39 votes

Un exemple possible serait de journaliser votre exécution. Si vous écrivez "J'ai eu une erreur dans " . FONCTION dans un fichier journal ou autre chose. De cette façon, si le nom de la fonction est modifié, vous n'avez pas à vous soucier de la personne se souvenant de changer le message de journal.

1 votes

A eu besoin de ceci pour le journalisation! merci de demander :)

442voto

Silfverstrom Points 8132

La manière précise est d'utiliser la __FUNCTION__ constante magique prédéfinie.

Exemple:

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

Résultat: MethodA.

6 votes

FONCTION fonctionne également pour les fonctions non liées à une classe. Testé sur PHP 7.0.8.

0 votes

De la même manière, comment obtenir le nom de la classe ?

3 votes

@KiranReddy Il y a également une constante magique pour cela : __CLASS__. Ou vous pouvez utiliser get_class($this).

104voto

PatrikAkerstrand Points 23968

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

45 votes

MÉTHODE inclut le nom de la classe, FONCTION est simplement cela. Ce dernier est également disponible dans la méthode d'une classe.

3 votes

C'est vrai. Mais il est souvent utile d'obtenir MyClass::methodName au lieu de methodName.

0 votes

La méthode ne renvoie pas nécessairement le nom de la classe; si l'endroit où elle est appelée se trouve à l'intérieur d'un trait, vous obtiendrez le nom du trait. Si vous voulez obtenir le nom de la classe de l'instance utilisée, utilisez get_class($this).

19voto

Kevin Newman Points 1528

Si vous utilisez PHP 5, vous pouvez essayer ceci :

function a() {
    $trace = debug_backtrace();
    echo $trace[0]["function"];
}

17 votes

Ceci est incroyablement intensif en ressource. Utiliser FONCTION ou MÉTHODE est bien plus efficace. debug_backtrace() est génial si vous avez besoin de plus que juste le nom de la fonction.

2 votes

Il est mauvais de s'appuyer sur debug_backtrace() à cette fin

1 votes

C'EST LA SEULE MANIÈRE CORRECTE que j'ai trouvée !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! car __FUNCTION__ retourne le nom de la fonction parent (lorsque la fonction actuelle est incluse dans la fonction parent)

3voto

Haim Evgi Points 40786

Ce que je sais, c'est que vous pouvez obtenir toutes les fonctions que vous créez

$arr = get_defined_functions();

affichera

[utilisateur] => Array
        (
            [0] => nomdelafonction
        )

2voto

Snehal K Points 19
MethodA();
?>

Résultat : "MethodA";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X