Что такое анонимная функция php
Анонимные функции позволяют передавать в качестве параметров функции другие функции или присваивать их переменным.
Анонимная функция определяется как обычная функция за тем исключением, что она не имеет имени. Например:
Здесь переменной $hello присваивается анонимная функция. Эта функция также определяется с помощью ключевого слова function . Она также принимает параметры — в данном случае параметр $name . И также она имеет некоторый блок операторов.
Для вызова подобной функции применяется имя представляющей ее переменной:
Фактически подобная переменная применяется как стандартная функция.
Также анонимные функции могут возвращать некоторое значение:
Распространенным случаем применения анонимных функций является передача их параметрам других функции. Таким анонимные функции еще называют функциями обратного вызова или коллбеками (callback function). Рассмотрим простейший пример:
В данном случае функция welcome() имеет параметр $message , который внутри функции вызывается подобно функции $message() .
При вызове функции welcome() параметру $message передается анонимная функция, которая выводит строку «Hello!». В этоге при вызове
Фактически будет выполняться функция
Подобным образом мы можем передавать одну функцию различные анонимные функции:

В чем польза подобной передачи анонимных функций в качестве параметров? А польза заключается в том, что мы можем определить функцию, но на момент определения функции точно не знать, какие действия она будет выполнять при вызове. Либо просто сделать логику функции более гибкой. Например, нам надо определить функцию которая выводит сумму элементов массива:
Но теперь пойдем дальше: допустим, мы хотим, чтобы функция подсчитывала сумму только тех чисел, которые удовлетворяют определенному условию, например, только положительных чисел или только четных чисел. Но на момент определения функции мы не знаем, какое условие мы захотим использовать в будущем. И в этом случае мы можем использовать анонимные функции:
Здесь функция sum() в качестве второго параметра — $condition принимает другую функцию. В цикле при переборе массива с помощью этой функции мы проверяем, удовлетворяет ли элемент массива условию:
Причем сейчас мы не значем, что это будет за условие, как именно функция $condition будет работать. Мы только знаем, что она получает число и возвращает true , если число удовлетворяет условию, либо false — если не удовлетворяет.
И если только число соответствует условию, тогда прибавляем число к общему результату:
При вызове функции sum() в качестве параметра $condition передаются конкретные анонимные функции. Например, функиция, которая определяет, является ли число четным:
Логика функции проста: если остаток от деления числа на 2 равен 0, то число четное. и функция возвращает true .
Далее мы передаем эту функицию:
В итоге при вызове if($condition($number)) фактически будет выполняться функция $isEvenNumber() .
Анонимные, или лямбда-функции в php.

Привет всем и сегодня мы поговорим о том, что такое анонимные функции в php и где их использовать.
Анонимные функции, или по-другому лямбда-функции — это функции, у которых нет имени.
Пример обычной функции
<?php
function FuName($txt) <
echo «My text: «.$txt;
>
У нас есть функция, которая принимает один параметр. Дальше мы записываем имя функции в переменную и вызываем её. Ничего необычного. В ООП стиле это будет более оправдано.
$class = new MyClass();
$func = «bar»;
$class->$func();
?>
Анонимные функции
Если вы знакомы с анонимными функциями из языка JavaScript, то вам понятно, зачем они нужны, а если нет, то читайте дальше.
Чтобы вызвать нашу анонимную функцию где-то дальше в коде программы, мы можем присвоить её переменной
Заметьте, что в конце стоит ;, т.к. мы присваиваем переменной значение, равное функции. Но вся соль не в этом, а в том, что мы можем использовать эти функции в качестве callback-функций. Например:
Ключевое слово USE
Опять же, если вы знаете JavaScript, то это не будет для вас проблемой. Ключевое слово USE позволяет использовать приём замыкания, т.е. с его помощью мы можем достучаться до внешних переменных.
<?php
$mx = function ($high_val) <
return function ($val) use ($high_val) <
return $val > $high_val;
>;
>;
$i = array(1, 2, 3, 4, 5, 6, 7);
$o = array_filter($input, $max_comp(2));
?>
Здесь мы внутри нашей лямбда-функции используем глобальную переменную high_val. Чтобы это было возможным, мы должны после слова function и параметров в круглых скобках написать use и передать туда название внешней переменной, которую мы хотим использовать внутри кода функции.
Однако, мы не сможем поменять значение нашей глобальной переменной таким образом. Чтобы сделать это, нужно перед её названием указать знак &
<?php
$name = «Brian»;
$setName = function($n) use(&$name) <
$name = $n;
>;
Заключение
Итак, сегодня вы узнали, что такое анонимные функции в php и как их использовать. Удачи!
Anonymous functions
Анонимные функции, также известные как closures , позволяют создавать функции без определенного имени. Они наиболее полезны в качестве значений вызываемых параметров, но имеют много других применений.
Анонимные функции реализованы с помощью класса Closure .
Пример # 1 Пример анонимной функции
Замыкания также могут использоваться как значения переменных; PHP автоматически преобразует такие выражения в экземпляры внутреннего класса Closure . Назначение закрытия переменной использует тот же синтаксис, что и любое другое присвоение, включая конечную точку с запятой:
Пример # 2 Пример присвоения переменной анонимной функции
Замыкания также могут наследовать переменные из родительской области. Любые такие переменные необходимо передать конструкции языка use . Начиная с PHP 7.1, эти переменные не должны включать суперглобальные переменные , $this или переменные с тем же именем, что и параметр. Объявление типа возвращаемого значения функции должно быть размещено после предложения use .
Пример # 3 Наследование переменных из родительской области видимости
Из приведенного выше примера будет выведено нечто подобное:
Начиная с PHP 8.0.0,список унаследованных переменных может включать запятую,которая будет проигнорирована.
Наследование переменных из родительской области — это не то же самое, что использование глобальных переменных. Глобальные переменные существуют в глобальной области видимости, которая остается неизменной независимо от того, какая функция выполняется. Родительской областью замыкания является функция, в которой было объявлено замыкание (не обязательно функция, из которой она была вызвана). См. Следующий пример:
Пример # 4 Замыкания и область видимости
Пример # 5 Автоматическая привязка $this
Выводится приведенный выше пример:
При объявлении в контексте класса текущий класс автоматически привязывается к нему, делая $this доступным внутри области видимости функции. Если это автоматическое связывание текущего класса не требуется, вместо него можно использовать статические анонимные функции .
Статические анонимные функции
Анонимные функции могут быть объявлены статически.Это предотвращает их автоматическое связывание с текущим классом.Объекты также не могут быть привязаны к ним во время выполнения.
Пример # 6 Попытка использовать $this внутри статической анонимной функции
Выводится приведенный выше пример:
Пример # 7 Попытка привязать объект к статической анонимной функции
PHP: анонимные функции. Где и как использовать?
В этой записи, я расскажу про анонимные функции в PHP, как и где их использовать. Покажу множество разных примеров использования и дам общие рекомендации по использованию.
Обычная функция vs. анонимная функция
Обычная функция выглядит примерно так:
Вызывается следующим образом:
Анонимная функция (Closure), в PHP дает возможность создавать функцию без имени (например, без printName() как в примере выше). Они части используются в роли callback.
Анонимные функции всегда возвращают Closure. Особо не нагружайте себя почему, чуть ниже, в этом посту я распишу почему так.
Давайте рассмотрим следующий пример анонимной функции:
У нас есть переменная $string и $func . Где $string — это обычная переменная со строкой, где $func — это переменная, которая хранит результат анонимную функцию.
Этой частью кода:
Вы обозначаете, что хотите использовать анонимную функцию и внутри внутри нужно использовать переменную $string .
Что мы и делаем:
В самом конце вызываем анонимную функцию добавляя к переменной «()», тем самым делая из нее функцию:
Анонимная функция в переменной
В примере выше, где проводилось сравнение, анонимная функция использовалась в виде переменной.
Чтобы не мешать все в кучу, давайте создадим новый пример:
В этом примере мы используем $namePrinter() для вызова анонимной функции, но альтернативно вы могли бы создать функцию с названием namePrinter() и вызывать точно в таком же порядке.
Анонимная функция как callback
Давайте рассмотрим следующий пример callback функции:
В этом примере, обозначили массив с двумя имена в нижнем регистре. На третье строчке, у нас функция, которые принимает значение параметр в виде имени, переводит первую букву имени в верхний регистр и возвращает результат.
В сам конце мы используем array_map() . Первый аргумент — это функция обозначенная выше, второй — это имена с первой строчки.
array_map() проходится по массиву с вашим обозначенной callback функцией.
Надо бы переписывать пример выше, так как в реальной жизни вы не должны писать мини функцию в таком случае, иначе размер вашего файла будет расти и расти, а это не есть хорошо 🙂
Смотрите новый вариант, который состоит всего из 5 строк:
Результат точно такой же как и в примере выше.
Создание Closure с анонимной функцией
Давайте рассмотрим такой приме:
Объяснение

Я создал новый класс Test , который включает в себя один метод doSomething() с двуми передаваемым параметрами: $num , $closure . Второй параметр не обязательный.