Как передать внешний параметр в анонимную функцию в PHP?

«Как передать внешний параметр в анонимную функцию в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В PHP для передачи переменных из внешней области видимости в анонимную функцию используется конструкция use.

Базовый пример:

$externalVar = 'Hello';
$func = function() use ($externalVar) {
    echo $externalVar; // Доступ к $externalVar
};
$func(); // Выведет "Hello"

Ключевые особенности:

  1. Передача по значению (по умолчанию): Переменная копируется в момент создания функции. Последующие изменения внешней переменной не влияют на значение внутри функции.

    $count = 1;
    $func = function() use ($count) {
        echo $count; // Всегда будет 1
    };
    $count = 100;
    $func(); // Выведет 1
  2. Передача по ссылке: Чтобы изменения внутри функции влияли на внешнюю переменную и наоборот, нужно передать её по ссылке, добавив &.

    $count = 1;
    $func = function() use (&$count) {
        $count++;
    };
    $func();
    echo $count; // Выведет 2
  3. Стрелочные функции (PHP 7.4+): Автоматически захватывают переменные из родительской области видимости по значению. Синтаксис более лаконичный.

    $externalVar = 'World';
    $func = fn() => "Hello $externalVar";
    echo $func(); // Выведет "Hello World"

    В стрелочных функциях захват всегда происходит по значению.