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


235

¿Es posible?

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

1
Solo por curiosidad, ¿cuándo hay una necesidad de esto? ¿Es posible crear funciones de las que no sabes el nombre?
— DisgruntledGoat

37
Un posible uso sería registrar su ejecución. Si está escribiendo "Tuve un error en". FUNCIÓN 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.
— Brian Ramsay

1
¡Lo necesitaba para iniciar sesión! gracias por preguntar :)
— SublymeRick

2
También es útil si desea usar el nombre de la función dentro de la función (para otro uso). Le gustaría construir enlaces basados ​​en la función, etc. (por ejemplo: function name1()luego use name1 nuevamente dentro), le ahorraría mucho tiempo si tiene la misma plantilla para muchas funciones.
— Mafia

1
@DisgruntledGoat: es útil si crea funciones manualmente y no desea editar el mensaje de error para cada función. Agregarlo al mensaje de error significa que tiene menos trabajo.
— John Boe

Respuestas:


390

La forma precisa es utilizar la __FUNCTION__ constante mágica predefinida .

Ejemplo:

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

Resultado: MethodA.


66
FUNCIÓN también funciona para funciones que no son de clase. Probado en PHP 7.0.8.
— mvsagar

De la misma manera, ¿cómo obtener el nombre de la clase?
— Kiran Reddy

2
@KiranReddy Hay una constante mágica para eso también: __CLASS__. O puedes hacer get_class($this).
— Sean the Bean

1
Probado en PHP> = 4
— Nabi KAZ

98

Puede usar las constantes mágicas __METHOD__ (incluye el nombre de la clase) o __FUNCTION__(solo el nombre de la función) dependiendo de si es un método o una función ... =)


42
MÉTODO incluye el nombre de la clase, FUNCIÓN es solo eso. Este último está igualmente disponible en el método de una clase.
— Alister Bulman

3
Es verdad. Pero a menudo es útil obtener MyClass :: methodName en lugar de methodName.
— PatrikAkerstrand

16

Si está utilizando PHP 5, puede probar esto:

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

14
Esto es increíblemente intensivo en recursos. Usar FUNCTION o METHOD es mucho más eficiente. sin embargo, debug_backtrace () es excelente si necesita algo más que el nombre de la función.
— Luke Cousins ​​el

2
Es una mala práctica usar debug_backtrace () para este propósito
— Marcio Mazzucato

1
Esta es la única forma correcta que he encontrado !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! porque __FUNCTION__devuelve el nombre de la función principal (cuando la función actual se incluye en la función principal)
— T.Todua

55
@tazo todua. ¿Puede dar un ejemplo?
— alds

2
<?php

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

Resultado: "Método A";


Si bien este fragmento de código puede ser la solución, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no conocer los motivos de su sugerencia de código.
— SilverNak
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.