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

Замыкания в PHP

Замыкания в PHP php

Замыкания в 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;
 
Предыдущая заметка MySQL: Полезные запросы
Следующая заметка Git - 10 полезных команд

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

Міністерство оборони
України
з 24.02 по 19.05
втрати противника
орієнтовно склали:
492290 ( +1210 ) особового складу
7576 ( +16 ) танків
14630 ( +35 ) бойових бронемашин
12687 ( +48 ) артилерійських систем
1074 ( +3 ) РСЗВ
803 ( +2 ) засоби ППО
354 ( +0 ) літаків
326 ( +0 ) гелікоптерів
17251 ( +82 ) автомобільної техніки
26 ( +0 ) кораблі / катери
2204 ( +1 ) крилаті ракети
10155 ( +47 ) БПЛА
2077 ( +2 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
1 ( +0 ) war.submarines

Поиск