いくつかの抽象的なコード:
function test($a = 5) {
debug_backtrace();
a = 10;
}
debug_trace はテスト関数の引数について何を教えてくれるでしょうか? 5 または 10 として
キャプチャされますか?$a
いくつかの抽象的なコード:
function test($a = 5) {
debug_backtrace();
a = 10;
}
debug_trace はテスト関数の引数について何を教えてくれるでしょうか? 5 または 10 として
キャプチャされますか?$a
この例から関数を呼び出すと、次のようになります。
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() が実際に呼び出されたときに) 常に出力します。親関数呼び出しで別の値があったとしてもです。
デバッグするときは注意してください!:)