在每个PHP回溯级别获取范围内的变量?

时间:2010-08-05 19:27:39

标签: php scope backtrace

有没有办法在回溯中查看每个堆栈帧中设置的变量?我可以使用debug_backtrace(true)来获取对象,get_object_vars组合每个对象以获得$ this vars,每个回溯帧中的args键以及{{1}获取全局变量,但在函数中设置的任何临时变量我都找不到检索方法。

以下是一个示例情况:

get_defined_vars

可以通过回溯中的function method1($foo) { $temp = method2($foo + 1); foreach ($temp as $t) { method2($t); } } function method2($bar) { $temp2 = $bar->value + $_GET['val']; debug(); } function debug() { // to be created $global_scope = get_defined_vars(); $bt = debug_backtrace(true); } 键获取$foo$barargs到{{1}的对象变量通过$bar的全局变量。我想要来获取get_object_varsget_defined_vars的价值。

2 个答案:

答案 0 :(得分:1)

在(本地)服务器上安装并启用XDebug。然后使用xdebug_get_declared_vars()。确保在xdebug xdebug.collect_vars文件中将.ini设置为开。

实施例

<?php
    class strings {
        static function fix_strings($a, $b) {
            foreach ($b as $item) {
            }
            var_dump(xdebug_get_declared_vars());
        }
    }
    strings::fix_strings(array(1,2,3), array(4,5,6));
?>

返回:

array
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'item' (length=4)

来自xdebug.org

的示例

注意,该函数仅返回调用函数xdebug_get_declared_vars()的范围内的变量。

答案 1 :(得分:-1)

改变你的调试以获得1个参数。然后传入get_defined_vars。这将为您提供本地范围内所有变量的数组。