debug_backtrace()捕获什么状态的函数参数?

时间:2016-02-05 15:19:39

标签: php debugging debug-backtrace

一些抽象代码:

paintEvent()

debug_trace会告诉我们测试函数的参数是什么?
它会将paintEvent()捕获为5还是10?

1 个答案:

答案 0 :(得分:0)

如果我们以这种方式从示例中调用函数:

test(4);

它会捕获'4'。

如果我们这样称呼它:

test();

它实际上不会捕获有关参数的数据。我想如果没有在任何地方使用过,解析器不会初始化参数。 (调用debug_backtrace不计算。)

我做了一些更多的研究,如果通过引用传递参数,事情已经变得有些出乎意料(对我个人而言)......但是合乎逻辑,我承认。

如果我们使用以下代码:

<?php
    function test2(&$a) {
            $a = 5;
            test($a);
            $a = 8;
    }
    function test(&$a) {
            $a = 6;
            print_r(debug_backtrace());
            $a = 7;
    }
    $test = 1;
    test2($test);

我们会得到这样的结果:

Array (
  [0] => Array (
    [file] => /var/www/localhost/htdocs/index.php
    [line] => 4
    [function] => test
    [args] => Array ( [0] => 6 ) 
  )
  [1] => Array (
    [file] => /var/www/localhost/htdocs/index.php
    [line] => 13
    [function] => test2
    [args] => Array ( [0] => 6 ) 
  ) 
)

因此,debug_backtrace()始终打印引用传递的函数参数的当前状态(实际调用debug_backtrace()时),无论它们是否在父函数调用上有另一个值。
调试时要小心! :)