0

これを説明するのは少し難しいですが、コードはより明確になるかもしれません:

// 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 行目でエラーが発生したことをどのように通知できますか?

私は現在使用していますが、test.phpの配列インデックスは、オブジェクトのdebug_backtrace()深さや数によって異なりますrequire()

関数呼び出しのネストの深さに関係なく、これを特定する方法はありますか?

4

1 に答える 1

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
                (
                )

        )

)

例外をスローしてバブルアップさせることもできます。これにより、スクリプトが強制終了され、完全なバックトレースが表示されます。それがあなたのために働くかどうか見てください。

于 2012-07-25T19:06:53.720 に答える