Como obtenho o nome da função dentro de uma função no PHP?

235

É possível?

function test()
{
  echo "function name is test";
}
AMD
fonte
1
Apenas por curiosidade, quando é necessário? É possível criar funções que você não conhece o nome?
precisa
37
Um uso possível seria registrar sua execução. Se você está escrevendo "Ocorreu um erro em". FUNÇÃO a um arquivo de log ou algo assim. Dessa forma, se o nome da função for alterado, você não precisará se preocupar com a pessoa que se lembra de alterar a mensagem de log.
27430 Brian Ramsay
1
Precisava disso para registrar! obrigado por perguntar :)
SublymeRick 31/07
2
Também é útil se você quiser usar o nome da função dentro da função (para outro uso). Gostaria de construir links com base na função, etc. (por exemplo: function name1()use name1 novamente dentro), economizaria muito tempo se você tivesse o mesmo modelo para muitas funções.
Mafia
1
@DisgruntledGoat: é útil se você criar funções manualmente e não desejar editar mensagens de erro para todas as funções. Adicioná-lo à mensagem de erro significa que você tem menos trabalho.
John Boe

Respostas:

390

A maneira exata é usar a __FUNCTION__ constante mágica predefinida .

Exemplo:

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

Resultado: MethodA.

Silfverstrom
fonte
6
FUNCTION também funciona para funções que não são de classe. Tentei no PHP 7.0.8.
precisa saber é o seguinte
Da mesma maneira, como obter o nome da classe?
22418 Kiran Reddy
2
@KiranReddy Há uma constante mágica para isso também: __CLASS__. Ou você pode fazer get_class($this).
Sean the Bean
1
Tentei em PHP> = 4
Nabi KAZ
98

Você pode usar as constantes mágicas __METHOD__ (inclui o nome da classe) ou __FUNCTION__(apenas o nome da função), dependendo se é um método ou uma função ... =)

PatrikAkerstrand
fonte
42
MÉTODO inclui o nome da classe, FUNCTION é exatamente isso. O último está igualmente disponível no método de uma classe.
Alister Bulman
3
Isso é verdade. Mas geralmente é útil obter MyClass :: methodName em vez de methodName.
PatrikAkerstrand
16

Se você estiver usando o PHP 5, pode tentar o seguinte:

function a() {
    $trace = debug_backtrace();
    echo $trace[0]["function"];
}
Kevin Newman
fonte
14
É um recurso incrível que consome muitos recursos. Usar FUNCTION ou METHOD é muito mais eficiente. debug_backtrace () é ótimo se você precisar de mais do que apenas o nome da função.
Luke Cousins
2
É uma má prática para uso debug_backtrace () para esta finalidade
Marcio Mazzucato
1
ESTA É A ÚNICA MANEIRA CORRETA que encontrei !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! Porque__FUNCTION__ nome retornos pai função (quando a função actual está incluído em função pai)
T.Todua
5
@tazo todua. Você pode dar um exemplo?
AIDS
2
<?php

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

Resultado: "Método A";

Snehal K
fonte
Embora esse snippet de código possa ser a solução, incluir uma explicação realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código.
SilverNak