Замыкания / Closure

Последнее обновление: 12.03.2021

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

Вначале рассмотрим анонимную функцию, которая пытается использовать некоторую внешнюю переменную:

<?php
$number = 89;

$showNumber = function()
{
	echo $number;
};

$showNumber();
?>

Анонимная функиция, которая представлена переменной $showNumber, пытается обратиться к внешней переменной $number. Однако при выполнении скрипта мы увидим в браузере сообщение об ошибке:

Warning: Undefined variable $number in C:\localhost\hello.php on line 13

То есть по умолчанию переменной $number для анонимной функции не существует. Из данной сиутации мы можем выйти, использовав оператор global или массив $GLOBALS, которые рассматриваются в одной из последующих тем. Тем не менее замыкания также позволяют решить эту проблему. Так, трансформируем функцию в замыкание:

<?php
$number = 89;

$showNumber = function() use($number)
{
	echo $number;
};

$showNumber();
?>

Выражение use() получает внешние переменные, которые анонимная функция собирается использовать. И теперь при ее выполении браузер выведет значение переменной $number.

Подобным образом функция-замыкание может захватывать и большее количество внешних переменных, а также как и другие функции применять параметры:

$a = 8; 
$b = 10;

$closure = function($c) use($a, $b)
{
	return $a + $b + $c;
};

$result = $closure(22);	// 40
echo $result;
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850