一些抽象代碼:debug_backtrace()捕獲什麼狀態的函數參數?
function test($a = 5) {
debug_backtrace();
a = 10;
}
會有什麼debug_trace介紹一下測試函數的參數?
它會將$a
捕獲爲5還是10?
一些抽象代碼:debug_backtrace()捕獲什麼狀態的函數參數?
function test($a = 5) {
debug_backtrace();
a = 10;
}
會有什麼debug_trace介紹一下測試函數的參數?
它會將$a
捕獲爲5還是10?
如果我們從調用示例中的功能是這樣的:
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()實際上被稱爲),無論他們是否有父函數調用的另一個值。
調試時要小心! :)
如何調試調試? –
@MadPhysicist,恩,對不起? – mvlabat
我不認爲你知道什麼「僞代碼」的含義。 –
@MadPhysicist是的,謝謝,我的失敗..希望「抽象」將更適合這種情況 – mvlabat