在PHP中获取一个被调用的函数列表

时间:2010-10-07 12:25:55

标签: php

在PHP中,get_included_files()返回一个包含所包含文件名称的数组。

以类似的方式,有没有办法得到一个带有参数的被调用函数名称的数组?

7 个答案:

答案 0 :(得分:9)

  

这样,有没有办法得到一个带有参数的被调用函数名称的数组?

没有。

你可以做的是一个debug_backtrace(),它将显示所有函数调用(带参数),这些函数调用导致执行从回溯的行(“调用” stack“),但这与脚本中曾经调用过的所有函数都不同。

你想做什么?也许有不同的方法。

答案 1 :(得分:6)

我正在寻找类似的东西,发现xdebug的跟踪非常有用。

以下是它的外观示例: http://devzone.zend.com/1135/tracing-php-applications-with-xdebug/

答案 2 :(得分:4)

我试图达到你想要的效果,最终找到了合理的解决方案。

创建一个名为Debug的类,并将其包含在您要调试的每个文件的上方。自己构建一个函数,可以很好地打印$calls中存储的信息。

class Debug {
    private static $calls;

    public static function log($message = null)
    {
        if(!is_array(self::$calls))
            self::$calls = array();

        $call = debug_backtrace(false);
        $call = (isset($call[1]))?$call[1]:$call[0];

        $call['message'] = $message;
        array_push(self::$calls, $call);
    }
}

每次在函数体中声明函数第一行时调用此函数:Debug::log($message(optional) )

答案 3 :(得分:2)

不是我知道的。

但是,您可以使用debug_backtrace来获取当前活动的函数/方法层次结构。

答案 4 :(得分:1)

我认为没有办法做你想做的事。遗憾。

我能得到的最接近的是function_exists()函数,它会告诉你是否已加载特定函数。

你想在这里完成什么?我看不到需要可用函数列表的用例(在php_info()类型屏幕之外)。

答案 5 :(得分:1)

您必须将其安装为扩展程序,但像XHProf这样的分析器会告诉您调用哪些函数以及它们需要多长时间以及调用图。

答案 6 :(得分:1)

XHProfWebgrind / KCachegrind会显示所调用的函数,但不会显示其参数。

您还可以使用get_defined_functions,它会为您提供所有已定义函数的列表。但它不会告诉你实际调用了哪些函数,以及使用了什么参数。

如果你真的需要知道参数,我不知道除了Henze在答案中提供的自定义记录器之外的任何工具。