PHP 5中的调用函数?

有一个PHP函数来查找给定函数中的调用者函数的名称?

请参阅debug_backtrace – 这可以将您的调用堆栈追踪到顶部。

以下是你如何得到你的来电者:

$trace = debug_backtrace(); $caller = $trace[1]; echo "Called by {$caller['function']}"; if (isset($caller['class'])) echo " in {$caller['class']}"; 

Xdebug提供了一些很好的function。

 <?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(); ?> 

会返回跟踪

 callee() called @ /var/www/xd.php: 16 from MyClass::__construct 

在ubuntu上安装Xdebug最好的方法是

 sudo aptitude install php5-xdebug 

您可能需要先安装php5-dev

 sudo aptitude install php5-dev 

更多信息

debug_backtrace()提供当前调用堆栈中参数,函数/方法调用的详细信息。

这是非常晚,但我想分享的function,将提供函数的名称从当前函数被调用。

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

我希望这会有用。

做这个和自己使用这个

 /** * 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; } } 
 echo debug_backtrace()[1]['function']; 

从PHP 5.4开始工作 。

或优化(例如非debugging用例):

 echo debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function']; 

第一个参数防止填充未使用的函数参数,第二个参数限制跟踪到两个级别(我们需要第二个)。

您可以从debug_backtrace返回的数组中提取此信息

我只是想说,flori的方式将不会作为一个函数,因为它总是会返回被调用的函数名称,而不是调用者,但我没有评论的声誉。 基于flori的答案,我做了一个非常简单的函数,对我的情况来说工作正常:

 class basicFunctions{ public function getCallerFunction(){ return debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 3)[2]['function']; } } 

例:

 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.. } 

我为Zend_Log做了一个小扩展,现在它显示了从哪里调用logging器的类/方法/行。 见这里http://mikebevz.com/2010/08/logger-with-caller-class-based-on-zend_log/

这一个最适合我: var_dump(debug_backtrace());

其实我认为debug_print_backtrace()做你所需要的。 http://php.net/manual/en/function.debug-print-backtrace.php

这应该工作:

 $caller = next(debug_backtrace())['function'];