Оглавление
Введение в анонимные функцииПередача анонимной функции в другую функциюОбласть видимости анонимной функцииВозврат анонимной функции из функцииИтог
Анонимные функции в PHP
Введение в анонимные функции
Обычно при определении функции вы указываете ей имя, чтобы затем вызывать её по этому имени. Например, функция для умножения двух чисел:
Функция
multiply() принимает два аргумента и возвращает результат. Вызвать её можно так:Это именованная функция, которую можно использовать многократно.
PHP также позволяет создавать анонимные функции, то есть функции без имени:
Так как у функции нет имени, её определение заканчивается точкой с запятой, ведь для PHP это выражение. Сама по себе такая функция бесполезна, чтобы её использовать, нужно присвоить её переменной:
Вызов осуществляется через переменную:
Если вывести информацию о переменной
$multiply, вы увидите объект типа Closure:Вывод:
Важно: в PHP
Closure - не то же самое, что замыкания в других языках (например, JavaScript или Python).Анонимная функция - это объект: её можно присваивать переменным, передавать в другие функции или возвращать из функций.
Передача анонимной функции в другую функцию
Многие встроенные функции PHP принимают колбэк-функции. Например,
array_map():Этот пример работает, но может быть избыточным, если функция используется только один раз. С анонимной функцией всё короче:
Область видимости анонимной функции
По умолчанию анонимная функция не имеет доступа к переменным родительской области видимости:
PHP выдаст ошибку о неопределённой переменной. Чтобы использовать внешнюю переменную, используйте конструкцию
use:Переменные передаются по значению. Изменения внутри функции не отражаются снаружи:
Вывод:
Для передачи по ссылке используйте
&:Вывод:
Возврат анонимной функции из функции
Можно возвращать анонимную функцию из другой функции:
Функция
multiplier() возвращает новую функцию, которая умножает аргумент на заданное число.Итог
- Анонимная функция - это функция без имени.
- В PHP анонимная функция является объектом типа
Closure. - Для доступа к переменным родительской области используйте конструкцию
use. - Анонимные функции можно присваивать переменным, передавать в другие функции и возвращать из функций.

