Слава Україні!

Замыкания в PHP

Замыкания в PHP
18-го листопада 2019, 13:01

Замыкания в 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;
 

Важлива інформація

Міністерство оборони
України
з 24.02 по 20.04
втрати противника
орієнтовно склали:
941100 ( +950 ) особового складу
10677 ( +1 ) танків
22271 ( +5 ) бойових бронемашин
26649 ( +49 ) артилерійських систем
1368 ( +0 ) РСЗВ
1139 ( +0 ) засоби ППО
370 ( +0 ) літаків
335 ( +0 ) гелікоптерів
45274 ( +112 ) автомобільної техніки
28 ( +0 ) кораблі / катери
3148 ( +0 ) крилаті ракети
33240 ( +64 ) БПЛА
3859 ( +1 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
1 ( +0 ) підводні човни