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

Анонимные функции в PHP

Анонимные функции в PHP
6-го лютого 2019, 6:22

Анонимная функция - как и следует из названия - не имеет имени. Во всем остальном - это обычная функция. Из-за отсутствия названия анонимные функции используются для передачи в качестве параметров функции другие функции или присваивания их переменным.


/** Присваиваем переменной анонимную ф-цию */
$hello = function($name)
{
    echo "<h2>Hello $name</h2>";
};
 

Анонимная функция определяется с помощью ключевого слова function и принимает параметр $name. Также она имеет некоторый блок операторов. Для вызова подобной функции применяется имя представляющей ее переменной

$hello("World");

Фактически подобная переменная применяется как стандартная функция.


<?php
    $hello = function($name)
    {
        echo "<h2>Hello $name</h2>";
    };
    $hello("Tom");
    $hello("Bob");
?>

Также анонимные функции могут возвращать некоторое значение:


<?php
    $sum = function($a, $b)
    {
        return $a + $b;
    };
    $number = $sum(5, 11);  //16
    echo $number;
?>
    

Распространенным случаем применения анонимных функций является передача их параметрам других функции. Такие анонимные функции еще называют функциями обратного вызова или коллбеками (callback function).


<?php
    function welcome($message)
    {
        $message();
    }

    welcome(function()
    {
        echo "Hello!";
    });
?>

В данном случае функция welcome() имеет параметр $message, который внутри функции вызывается подобно функции $message(). При вызове функции welcome() параметру $message передается анонимная функция, которая выводит строку "Hello!". Подобным образом мы можем передавать в одну функцию различные анонимные функции


<?php
    function welcome($message)
    {
        $message();
    }
    $goodMorning = function() { echo "<h3>Доброе утро</h3>"; };
    $goodEvening = function() { echo "<h3>Добрый вечер</h3>"; };

    welcome($goodMorning);          // Доброе утро
    welcome($goodEvening);          // Добрый вечер
    welcome(function(){ echo "<h3>Привет</h3>"; }); // Привет
?>

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

Міністерство оборони
України
з 24.02 по 24.06
втрати противника
орієнтовно склали:
1013700 ( +1200 ) особового складу
10966 ( +1 ) танків
22879 ( +7 ) бойових бронемашин
29511 ( +21 ) артилерійських систем
1424 ( +1 ) РСЗВ
1188 ( +0 ) засоби ППО
416 ( +0 ) літаків
337 ( +0 ) гелікоптерів
52961 ( +100 ) автомобільної техніки
28 ( +0 ) кораблі / катери
3388 ( +12 ) крилаті ракети
41915 ( +198 ) БПЛА
3920 ( +0 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
1 ( +0 ) підводні човни