2009-06-17 10 views
184

¿Es posible?¿Cómo obtengo el nombre de la función dentro de una función en PHP?

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

Sólo por curiosidad, ¿cuándo hay una necesidad de esto? ¿Es posible crear funciones de las que no se conoce el nombre? – DisgruntledGoat

+30

Un posible uso sería registrar su ejecución. Si está escribiendo "He cometido un error". __FUNCTION__ a un archivo de registro o algo así. De esta manera, si se cambia el nombre de la función, no tiene que preocuparse de que la persona recuerde cambiar el mensaje de registro. –

+1

¡Se necesita para iniciar sesión! gracias por preguntar :) – SublymeRick

Respuesta

85

Puede utilizar el magic constants__METHOD__ (incluye el nombre de la clase) o __FUNCTION__ (solo funcionan nombre) dependiendo de si se trata de un método o una función ... =)

+38

__METHOD__ incluye el nombre de la clase, __FUNCTION__ es solo eso. Este último está igualmente disponible en el método de una clase. –

+3

Eso es verdad. Pero a menudo es útil obtener MyClass :: methodName en lugar de methodName. – PatrikAkerstrand

+6

+1, '__METHOD__' es más específico que' __FUNCTION__'. – l0b0

13

Si está usando PHP 5 se puede tratar esto:

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

Esto es increíblemente intensivo en recursos. Usar __FUNCTION__ o __METHOD__ es mucho más eficiente. debug_backtrace() es genial si necesita algo más que el nombre de la función. –

+1

Es una mala práctica usar debug_backtrace() para este propósito –

+1

ESTE ES EL ** SOLO CORRECTO ** lo he encontrado !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! porque '__FUNCTION__' devuelve el nombre de la función principal (cuando la función actual se incluye en la función principal) –

Cuestiones relacionadas