我知道函数debug_backtrace,但我正在寻找一些准备使用函数的实现,如GetCallingMethodName()?如果它也给出了方法的类(如果它确实是一个方法),那就太完美了。


当前回答

最简单的方法是:

echo debug_backtrace()[1]['function'];

正如下面的评论所指出的,可以通过将参数传递给:

省略object和args索引 限制返回的堆栈帧数

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

其他回答

最简单的方法是:

echo debug_backtrace()[1]['function'];

正如下面的评论所指出的,可以通过将参数传递给:

省略object和args索引 限制返回的堆栈帧数

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

你也可以使用php异常提供的信息,这是一个优雅的解决方案:


function GetCallingMethodName(){
    $e = new Exception();
    $trace = $e->getTrace();
    //position 0 would be the line that called this function so we ignore it
    $last_call = $trace[1];
    print_r($last_call);
}

function firstCall($a, $b){
    theCall($a, $b);
}

function theCall($a, $b){
    GetCallingMethodName();
}

firstCall('lucia', 'php');

你会得到这个…(瞧!)

Array
(
    [file] => /home/lufigueroa/Desktop/test.php
    [line] => 12
    [function] => theCall
    [args] => Array
        (
            [0] => lucia
            [1] => php
        )

)

我最喜欢的方式,一句话!

debug_backtrace()[1]['function'];

你可以这样使用它:

echo 'The calling function: ' . debug_backtrace()[1]['function'];

注意,这只与去年发布的PHP版本兼容。但出于安全考虑,让PHP保持最新是一个好主意。

从php 5.4开始就可以使用

        $dbt=debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS,2);
        $caller = isset($dbt[1]['function']) ? $dbt[1]['function'] : null;

这不会浪费内存,因为它忽略参数,只返回最后2个回溯堆栈条目,并且不会像这里的其他答案一样生成通知。

我所见过的这个问题的最佳答案是:

list(, $caller) = debug_backtrace(false);

简洁明了