2016-02-05 53 views
1

一些抽象代碼:debug_backtrace()捕獲什麼狀態的函數參數?

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

會有什麼debug_trace介紹一下測試函數的參數?
它會將$a捕獲爲5還是10?

+0

我不認爲你知道什麼「僞代碼」的含義。 –

+0

@MadPhysicist是的,謝謝,我的失敗..希望「抽象」將更適合這種情況 – mvlabat

回答

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()實際上被稱爲),無論他們是否有父函數調用的另一個值。
調試時要小心! :)

+0

如何調試調試? –

+0

@MadPhysicist,恩,對不起? – mvlabat

相關問題