PHP 5中的来电功能?

131 php

是否有PHP函数来查找给定函数中调用函数的名称?

Pau*_*xon 184

请参阅debug_backtrace - 这可以跟踪您的调用堆栈一直到顶部.

这是你如何得到你的来电者:

$trace = debug_backtrace();
$caller = $trace[1];

echo "Called by {$caller['function']}";
if (isset($caller['class']))
    echo " in {$caller['class']}";
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这打印了被调用函数名称.使用`list(,$ caller)= debug_backtrace(false);`获取调用者,`false`获得性能;-)(php5.3) (58认同)
  • `debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS,2)[1] ['function'];`获取更好的执行的调用者名称. (19认同)
  • array shift将删除第一个元素并返回已删除的元素.原始数组将被修改,这应该给出'.$ trace [0] ['function']调用所需的结果`echo'. (4认同)

sva*_*ssr 16

Xdebug提供了一些不错的功能.

<?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();
?>
Run Code Online (Sandbox Code Playgroud)

将返回痕迹

callee() called @ /var/www/xd.php: 16 from MyClass::__construct
Run Code Online (Sandbox Code Playgroud)

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

sudo aptitude install php5-xdebug
Run Code Online (Sandbox Code Playgroud)

您可能需要先安装php5-dev

sudo aptitude install php5-dev
Run Code Online (Sandbox Code Playgroud)

更多信息


CMS*_*CMS 15

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


MAN*_*OPE 15

这是很晚但我想分享将给出调用当前函数的函数名称的函数.

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;
    }
Run Code Online (Sandbox Code Playgroud)

我希望这会有用.


flo*_*ori 9

echo debug_backtrace()[1]['function'];
Run Code Online (Sandbox Code Playgroud)

PHP 5.4开始工作.

或优化(例如,对于非调试用例):

echo debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'];
Run Code Online (Sandbox Code Playgroud)

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


Pau*_*bée 7

做到这一点并自己使用它

/**
 * 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;
    }   
}
Run Code Online (Sandbox Code Playgroud)