Ответ
В PHP для передачи переменных из внешней области видимости в анонимную функцию используется конструкция use.
Базовый пример:
$externalVar = 'Hello';
$func = function() use ($externalVar) {
echo $externalVar; // Доступ к $externalVar
};
$func(); // Выведет "Hello"
Ключевые особенности:
-
Передача по значению (по умолчанию): Переменная копируется в момент создания функции. Последующие изменения внешней переменной не влияют на значение внутри функции.
$count = 1; $func = function() use ($count) { echo $count; // Всегда будет 1 }; $count = 100; $func(); // Выведет 1 -
Передача по ссылке: Чтобы изменения внутри функции влияли на внешнюю переменную и наоборот, нужно передать её по ссылке, добавив
&.$count = 1; $func = function() use (&$count) { $count++; }; $func(); echo $count; // Выведет 2 -
Стрелочные функции (PHP 7.4+): Автоматически захватывают переменные из родительской области видимости по значению. Синтаксис более лаконичный.
$externalVar = 'World'; $func = fn() => "Hello $externalVar"; echo $func(); // Выведет "Hello World"В стрелочных функциях захват всегда происходит по значению.