1

いくつかの抽象的なコード:

function test($a = 5) {
  debug_backtrace();
  a = 10;
}

debug_trace はテスト関数の引数について何を教えてくれるでしょうか? 5 または 10 として
キャプチャされますか?$a

4

1 に答える 1

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() が実際に呼び出されたときに) 常に出力します。親関数呼び出しで別の値があったとしてもです。
デバッグするときは注意してください!:)

于 2016-02-05T15:51:56.280 に答える