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

Анонимные функции в 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 по 16.01
втрати противника
орієнтовно склали:
814150 ( +1480 ) особового складу
9791 ( +11 ) танків
20368 ( +20 ) бойових бронемашин
22015 ( +40 ) артилерійських систем
1262 ( +0 ) РСЗВ
1046 ( +0 ) засоби ППО
369 ( +0 ) літаків
331 ( +0 ) гелікоптерів
34132 ( +137 ) автомобільної техніки
28 ( +0 ) кораблі / катери
3049 ( +31 ) крилаті ракети
22503 ( +120 ) БПЛА
3697 ( +1 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
1 ( +0 ) підводні човни