发生错误时确定“违规”文件和行号

时间:2012-07-25 19:05:26

标签: php

这有点难以解释,但代码可能更清晰:

// class.php
class Foo
{
    public function bar ()
    {

    }
}


// test.php
$foo = new Foo;
$foo->bar(); // e.g., for some reason this returns an error hence error handler will be triggered

这是一个简化的示例,但test.php的嵌套可能更深。 我的自定义错误处理程序如何告诉我test.php第2行中发生了错误?

我目前正在使用debug_backtrace(),但test.php的数组索引会根据对象的深度或require()的数量

而变化

有没有办法确定这一点,无论函数调用的嵌套有多深?

1 个答案:

答案 0 :(得分:1)

您可以打印debug_backtrace(),它将生成所有来电者的完整数组,包括文件和行号。

实施例

<?php

    class Test {

        public function debug() {
            print_r(debug_backtrace());
        }
    }

    function print_debug() {
        $test = new Test();
        $test->debug();
    }

    header("Content-type: text/plain");
    print_debug();

结果

Array
(
    [0] => Array
        (
            [file] => D:\Websites\htdocs\tests\index.php
            [line] => 11
            [function] => debug
            [class] => Test
            [object] => Test Object
                (
                )

            [type] => ->
            [args] => Array
                (
                )

        )

    [1] => Array
        (
            [file] => D:\Websites\htdocs\tests\index.php
            [line] => 14
            [function] => print_debug
            [args] => Array
                (
                )

        )

)

您还可以尝试抛出异常,并允许它冒泡,它会杀死您的脚本,显示完整的回溯。看看它是否适合你。