Xdebug categóricamente no es solo una función PHP, que era la solicitud original. Si desea, por ejemplo, usar el nombre de la función de llamada en la lógica PHP posterior y no instalar XDebug en los servidores de producción, necesita una función PHP.
JP
Respuestas:
198
Vea debug_backtrace : esto puede rastrear su pila de llamadas hasta la parte superior.
Así es como obtendría su llamada:
$trace = debug_backtrace();
$caller = $trace[1];
echo "Called by {$caller['function']}";if(isset($caller['class']))
echo " in {$caller['class']}";
Me parece que esto imprime el nombre de la función llamada. Úselo list(, $caller) = debug_backtrace(false);para llamar, falsepara el rendimiento ;-) (php5.3)
Znarkus
Muchas soluciones que se ven en la web obtienen el segundo elemento de la matriz de seguimiento para obtener la llamada de la instancia: ¿podemos estar tan seguros de ello? ¿El segundo elemento es siempre el que estamos buscando? Pensé que un __construct () que incluye dentro de otra llamada como parent :: __ construct () podría cambiar de otra posición a la persona que llama (aún no lo intentó).
Emanuele Del Grande
1
Intenté verificar el orden de las llamadas devueltas mientras usaba un ReflectionClass, y obviamente cambia la posición del método de llamada "real", que es visible en la interfaz de usuario, por lo que no se puede suponer la posición de retroceso.
Emanuele Del Grande
44
El cambio de matriz eliminará el primer elemento y devolverá el elemento eliminado. La matriz original se modificará y esto debería dar el resultado requeridoecho 'called by '.$trace[0]['function']
GoodSp33d
21
debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'];para obtener el nombre de la persona que llama con un mejor rendimiento.
ahuigo
17
Xdebug proporciona algunas funciones agradables.
<?php
ClassMyClass{function __construct(){
$this->callee();}function callee(){
echo sprintf("callee() called @ %s: %s from %s::%s",
xdebug_call_file(),
xdebug_call_line(),
xdebug_call_class(),
xdebug_call_function());}}
$rollDebug =newMyClass();?>
devolverá rastro
callee() called @/var/www/xd.php:16fromMyClass::__construct
Para instalar Xdebug en ubuntu, la mejor manera es
Esto es muy tarde, pero me gustaría compartir la función que dará el nombre de la función desde la que se llama la función actual.
publicfunction getCallingFunctionName($completeTrace=false){
$trace=debug_backtrace();if($completeTrace){
$str ='';foreach($trace as $caller){
$str .=" -- Called by {$caller['function']}";if(isset($caller['class']))
$str .=" From Class {$caller['class']}";}}else{
$caller=$trace[2];
$str ="Called by {$caller['function']}";if(isset($caller['class']))
$str .=" From Class {$caller['class']}";}return $str;}
/**
* Gets the caller of the function where this function is called from
* @param string what to return? (Leave empty to get all, or specify: "class", "function", "line", "class", etc.) - options see: http://php.net/manual/en/function.debug-backtrace.php
*/function getCaller($what = NULL){
$trace = debug_backtrace();
$previousCall = $trace[2];// 0 is this call, 1 is call in previous function, 2 is caller of that functionif(isset($what)){return $previousCall[$what];}else{return $previousCall;}}
Solo quería decir que la forma de Flori no funcionará como una función porque siempre devolverá el nombre de la función llamada en lugar de la persona que llama, pero no tengo reputación de comentar. Hice una función muy simple basada en la respuesta de Flori que funciona bien para mi caso:
class basicFunctions{publicfunction getCallerFunction(){return debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS,3)[2]['function'];}}
Respuestas:
Vea debug_backtrace : esto puede rastrear su pila de llamadas hasta la parte superior.
Así es como obtendría su llamada:
fuente
list(, $caller) = debug_backtrace(false);
para llamar,false
para el rendimiento ;-) (php5.3)echo 'called by '.$trace[0]['function']
debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'];
para obtener el nombre de la persona que llama con un mejor rendimiento.Xdebug proporciona algunas funciones agradables.
devolverá rastro
Para instalar Xdebug en ubuntu, la mejor manera es
Es posible que primero necesite instalar php5-dev
más información
fuente
Esto es muy tarde, pero me gustaría compartir la función que dará el nombre de la función desde la que se llama la función actual.
Espero que esto sea útil.
fuente
debug_backtrace()
proporciona detalles de parámetros, llamadas de función / método en la pila de llamadas actual.fuente
Funciona desde PHP 5.4 .
O optimizado (por ejemplo, para casos de uso sin depuración):
El primer argumento impide llenar argumentos de funciones no utilizadas, el segundo limita la traza a dos niveles (necesitamos el segundo).
fuente
Hice esto y lo uso yo mismo
fuente
Solo quería decir que la forma de Flori no funcionará como una función porque siempre devolverá el nombre de la función llamada en lugar de la persona que llama, pero no tengo reputación de comentar. Hice una función muy simple basada en la respuesta de Flori que funciona bien para mi caso:
EJEMPLO:
fuente
Puede extraer esta información de la matriz devuelta por debug_backtrace
fuente
Este funcionó mejor para mí:
var_dump(debug_backtrace());
fuente
En realidad, creo que debug_print_backtrace () hace lo que necesita. http://php.net/manual/en/function.debug-print-backtrace.php
fuente
Esto debería funcionar:
fuente
Esto lo hará bien:
fuente