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

Замыкания в 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: Полезные запросы
Следующая заметка Стрелочные функции в PHP

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

Міністерство оборони
України
з 24.02 по 30.11
втрати противника
орієнтовно склали:
328760 ( +1180 ) особового складу
5551 ( +13 ) танків
10340 ( +28 ) бойових бронемашин
7909 ( +1 ) артилерійських систем
910 ( +0 ) РСЗВ
600 ( +0 ) засоби ППО
323 ( +0 ) літаків
324 ( +0 ) гелікоптерів
10361 ( +13 ) автомобільної техніки
22 ( +0 ) кораблі / катери
1567 ( +0 ) крилаті ракети
5954 ( +10 ) БПЛА
1124 ( +3 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
1 ( +0 ) war.submarines

Поиск