Как работает замыкание (closure) в PHP?

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

Ответ

Замыкание (closure) в PHP — это анонимная функция, которая может захватывать переменные из внешней области видимости, сохраняя их состояние на момент своего создания. Это реализуется с помощью ключевого слова use.

Пример создания и использования:

// Функция, создающая замыкание-умножитель
function createMultiplier($factor) {
    return function($number) use ($factor) {
        return $number * $factor;
    };
}

$double = createMultiplier(2);
$triple = createMultiplier(3);

echo $double(5); // Выведет: 10
echo $triple(5); // Выведет: 15

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

  • Захват переменных: Переменные из внешней области видимости передаются в замыкание через use. По умолчанию они передаются по значению (создается копия).
  • Передача по ссылке: Чтобы изменять исходную переменную, нужно использовать ссылку: use (&$variable).
  • Область применения: Замыкания широко используются для callback-функций, обработчиков событий, отложенного выполнения и реализации простых стратегий или фабрик.

Пример с передачей по ссылке:

$counter = 0;
$increment = function() use (&$counter) {
    $counter++;
    return $counter;
};

echo $increment(); // 1
echo $increment(); // 2