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


235

É possível?

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

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.


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 ... =)


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"];
}

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";


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.