Разъясните пожалуйста поведение переменных
В контроллере Ларавела есть метод:
public function method1(Request $request): Response
{
function recursive($array, $testValue)
{
\Log::info('+++++++++++++++++++++++++++');
\Log::info('testValue=' . $testValue);
foreach ($array as $key => $value) {
\Log::info('--- in foreach ---');
\Log::info('key=' . $key);
\Log::info('testValue=' . $testValue);
recursive($value, 'other');
}
}
$data =
array(
'a' =>
array(
'aa' =>
array(),
'ab' =>
array(),
),
);
\Log::info($data);
recursive(arrayFirstValue($data), 'first');
return response(null, Response::HTTP_OK);
}
function arrayFirstValue($array, $default = null)
{
foreach ($array as $item)
return $item;
return $default;
}
Код сделал условный для демонстрации проблемы. В переменной $data содержится маленький фрагмент дерева, с помощью функции recursive обхожу дерево и вывожу данные. Получаю результат:
[2021-05-18 08:06:54] local.INFO: +++++++++++++++++++++++++++
[2021-05-18 08:06:54] local.INFO: testValue=first
[2021-05-18 08:06:54] local.INFO: --- in foreach ---
[2021-05-18 08:06:54] local.INFO: key=aa
[2021-05-18 08:06:54] local.INFO: testValue=first
[2021-05-18 08:06:54] local.INFO: +++++++++++++++++++++++++++
[2021-05-18 08:06:54] local.INFO: testValue=other // почему разные значения?
[2021-05-18 08:06:54] local.INFO: --- in foreach ---
[2021-05-18 08:06:54] local.INFO: key=ab
[2021-05-18 08:06:54] local.INFO: testValue=first // почему разные значения?
[2021-05-18 08:06:54] local.INFO: +++++++++++++++++++++++++++
[2021-05-18 08:06:54] local.INFO: testValue=other
Не понимаю, почему переменная testValue после входа в цикл, вдруг отображает предыдущее значение. В вебе недавно, раньше были десктопные языки, исходя из предыдущего опыта, подобное поведение кажется нелогичным.