parametros - Función de llamada en PHP 5
llamar funcion php desde otro php (12)
De hecho, creo que debug_print_backtrace () hace lo que necesita. http://php.net/manual/en/function.debug-print-backtrace.php
¿Hay una función PHP para averiguar el nombre de la función de llamada en una función determinada?
Este funcionó mejor para mí: var_dump(debug_backtrace());
Esto debería funcionar:
$caller = next(debug_backtrace())[''function''];
Esto es muy tarde, pero me gustaría compartir la función que dará el nombre de la función a partir de la cual se llama a la función actual.
public function 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;
}
Espero que esto sea útil.
He hecho una pequeña extensión para Zend_Log, ahora muestra la clase / método / línea desde donde se llamó al registrador. Mira aquí http://mikebevz.com/2010/08/logger-with-caller-class-based-on-zend_log/
Hecho esto y usando esto yo mismo
/**
* 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 function
if(isset($what))
{
return $previousCall[$what];
}
else
{
return $previousCall;
}
}
Puede extraer esta información de la matriz devuelta por debug_backtrace
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 para comentar. Hice una función muy simple basada en la respuesta de flori que funciona bien para mi caso:
class basicFunctions{
public function getCallerFunction(){
return debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 3)[2][''function''];
}
}
EJEMPLO:
function a($authorisedFunctionsList = array("b")){
$ref = new basicFunctions;
$caller = $ref->getCallerFunction();
if(in_array($caller,$authorisedFunctionsList)):
echo "Welcome!";
return true;
else:
echo "Unauthorised caller!";
return false;
endif;
}
function b(){
$executionContinues = $this->a();
$executionContinues or exit;
//Do something else..
}
Ver debug_backtrace : esto puede rastrear tu pila de llamadas hasta llegar a la cima.
Así es como obtendrías a tu interlocutor:
$trace = debug_backtrace();
$caller = $trace[1];
echo "Called by {$caller[''function'']}";
if (isset($caller[''class'']))
echo " in {$caller[''class'']}";
Xdebug proporciona algunas funciones agradables.
<?php
Class MyClass
{
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 = new MyClass();
?>
devolverá el rastro
callee() called @ /var/www/xd.php: 16 from MyClass::__construct
Para instalar Xdebug en ubuntu, la mejor manera es
sudo aptitude install php5-xdebug
Es posible que tengas que instalar php5-dev primero
sudo aptitude install php5-dev
debug_backtrace()
proporciona detalles de parámetros, llamadas de función / método en la pila de llamadas actual.
echo debug_backtrace()[1][''function''];
Funciona desde PHP 5.4 .
O optimizado (por ejemplo, para casos de uso sin errores):
echo debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1][''function''];
El primer argumento impide rellenar argumentos de función no utilizados, el segundo limita el rastreo a dos niveles (necesitamos el segundo).