Come posso ottenere il nome della funzione all'interno di una funzione in PHP?


235

È possibile?

function test()
{
  echo "function name is test";
}

1
Solo per curiosità, quando ce n'è bisogno? È possibile creare funzioni di cui non si conosce il nome?
DisgruntledGoat

37
Un possibile utilizzo sarebbe la registrazione della tua esecuzione. Se stai scrivendo "Ho avuto un errore in". FUNZIONE per un file di registro o qualcosa del genere. In questo modo, se il nome della funzione viene modificato, non è necessario preoccuparsi della persona che si ricorda di modificare il messaggio di registro.
Brian Ramsay,

1
Necessario per la registrazione! grazie per
averlo

2
Utile anche se si desidera utilizzare il nome della funzione all'interno della funzione (per un altro uso). Ad esempio, costruire collegamenti in base alla funzione, ecc. (Es. function name1()Quindi utilizzare nuovamente name1 all'interno), farebbe risparmiare molto tempo se si dispone dello stesso modello per molte funzioni.
Mafia,

1
@DisgruntledGoat: è utile se si creano funzioni manualmente e non si desidera modificare il messaggio di errore per ogni funzione. Aggiungendolo al messaggio di errore significa che hai meno lavoro.
John Boe,

Risposte:


390

Il modo preciso è usare la __FUNCTION__ costante magica predefinita .

Esempio:

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

Risultato: MethodA.


6
FUNCTION funziona anche per funzioni non di classe. Provato su PHP 7.0.8.
mvsagar,

Allo stesso modo, come ottenere il nome della classe?
Kiran Reddy,

2
@KiranReddy C'è una costante magica anche per questo: __CLASS__. Oppure puoi farlo get_class($this).
Sean the Bean,

1
Ho provato a PHP> = 4
Nabi KAZ il

98

Puoi usare le costanti magiche __METHOD__ (include il nome della classe) o __FUNCTION__(solo il nome della funzione) a seconda che si tratti di un metodo o di una funzione ... =)


42
METODO include il nome della classe, FUNZIONE è proprio questo. Quest'ultimo è ugualmente disponibile nel metodo di una classe.
Alister Bulman,

3
È vero. Ma è spesso utile ottenere MyClass :: methodName invece di methodName.
PatrikAkerstrand,

16

Se stai usando PHP 5 puoi provare questo:

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

14
Questo è un incredibile dispendio di risorse. L'uso di FUNCTION o METHOD è molto più efficiente. debug_backtrace () è ottimo se hai bisogno di qualcosa di più del semplice nome della funzione.
Luke Cousins,

2
È una cattiva pratica usare debug_backtrace () per questo scopo
Marcio Mazzucato,

1
QUESTO È L' UNICO MODO CORRETTO che ho trovato !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! perché __FUNCTION__restituisce il nome della funzione padre (quando la funzione corrente è inclusa nella funzione padre)
T.Todua

5
@tazo todua. Puoi fare un esempio?
alds,

2
<?php

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

Risultato: "MetodoA";


Mentre questo frammento di codice può essere la soluzione, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
SilverNak,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.