Какое состояние аргументов функции захватывает debug_backtrace ()?

Немного абстрактного кода:

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

Что debug_trace расскажет нам об аргументах тестовой функции?

Будет ли это захватить $a как 5 или 10?

1

Решение

Если мы вызовем функцию из примера следующим образом:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]