Ответ
Анонимная функция (или замыкание, closure) — это функция без имени, которую можно сохранить в переменную, передать как аргумент или вернуть из другой функции. Часто используется для callback-ов и коротких операций.
$greet = function($name) {
return "Привет, $name!";
};
echo $greet('Мир'); // Выведет: Привет, Мир!
Ключевые особенности:
- Создается через ключевое слово
functionбез имени - Может принимать аргументы и возвращать значения
- Имеет доступ к переменным внешней области через
use - Полезна для обработчиков событий, колбэков в array_map/filter и т.д.
Пример с замыканием:
$multiplier = 2;
$double = function($x) use ($multiplier) {
return $x * $multiplier;
};
echo $double(5); // 10 Ответ 18+ 🔞
Слушай, вот объясняю, как бабушке на лавочке. Есть у нас в PHP такая штука — анонимная функция. По-умному её ещё замыканием зовут, closure там всякое. А по-простому — это функция, у которой имени нет, как будто она инкогнито, понимаешь? Её можно в переменную запихнуть, как котлету в булку, и потом вызывать. Или передать куда-то как аргумент — типа, "на, держи, выполни это". Очень удобно для всяких мелких операций или когда нужно callback сделать.
Вот смотри, как это выглядит, ёпта:
$greet = function($name) {
return "Привет, $name!";
};
echo $greet('Мир'); // Выведет: Привет, Мир!
Видишь? Создали через function, но имени не дали. Просто взяли и присвоили переменной $greet. А потом вызываем её, как обычную функцию, только через переменную. Красота же, блядь!
Теперь про ключевые фишки, чтобы ты не охуел потом:
- Создаётся через
functionи всё, имени — ноль. - Может принимать аргументы и что-то возвращать — как и любая уважающая себя функция.
- А вот это самое интересное — может доступ иметь к переменным снаружи. Но не просто так, а через волшебное слово
use. Без него — нихуя не увидит, будет как слепой котёнок. - Где это полезно? Да везде! Обработчики событий, колбэки в этих твоих
array_map,array_filter— просто овердохуища применений.
Вот тебе пример с замыканием, чтобы совсем всё стало ясно:
$multiplier = 2;
$double = function($x) use ($multiplier) {
return $x * $multiplier;
};
echo $double(5); // 10
Смотри, что тут происходит. Есть переменная $multiplier снаружи. Чтобы функция $double могла её использовать, мы говорим: "слушай, функция, используй (use) вот эту переменную". И она её как бы "замыкает" внутри себя — отсюда и название. Получается своя маленькая вселенная с данными. Удобно, правда? А то без этого пришлось бы глобальные переменные таскать, а это, я тебе скажу, пиздец как некрасиво и ненадёжно.