Замыкание
Замыкания в PHP представляют анонимную функцию, которая может использовать переменные из своего локального окружения. В отличие от обычных анонимных функций замыкания в PHP применяют выражение use
.
Вначале рассмотрим анонимную функцию, которая пытается использовать некоторую внешнюю переменную:
<?
$number = 89;
$showNumber = function()
{
echo $number;
};
$showNumber();
Анонимная функиция, которая представлена переменной $showNumber
, пытается обратиться к внешней переменной $number
. Однако при выполнении скрипта мы увидим в браузере сообщение об ошибке:
Warning: Undefined variable $number in C:\localhost\hello.php on line 13
То есть по умолчанию переменной $number
для анонимной функции не существует. Из данной сиутации мы можем выйти, использовав оператор global
или массив $GLOBALS
, которые рассматриваются в одной из последующих тем. Тем не менее замыкания также позволяют решить эту проблему. Так, трансформируем функцию в замыкание:
<?
$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;