> В чем разница короткого синтаксиса функций fn и замыканий в PHP (PHP)
Уровень: senior · Роль: backend · Язык: PHP · Категория: Технические вопросы
Компании: vanta
Стек: PHP
> Пример ответа
Основное различие между коротким синтаксисом функций fn (стрелочные функции) и замыканиями (анонимными функциями с function) в PHP заключается в области видимости переменных и синтаксисе.
Стрелочные функции (fn) автоматически захватывают переменные из родительской области видимости по значению (by value), и не требуют явного указания use. Они всегда возвращают выражение, и их тело состоит из одного выражения без фигурных скобок. Например:
PHP$multiplier = 2;$numbers = [1, 2, 3];$result = array_map(fn($n) => $n * $multiplier, $numbers); // [2, 4, 6]
Замыкания (анонимные функции) требуют явного указания переменных через use, если нужно получить доступ к внешним переменным. Они могут содержать несколько операторов в теле и поддерживают возврат по ссылке. Пример:
PHP$multiplier = 2;$numbers = [1, 2, 3];$result = array_map(function($n) use ($multiplier) {return $n * $multiplier;}, $numbers); // [2, 4, 6]
Ключевые отличия:
- Область видимости:
fnзахватывает переменные автоматически, замыкания - только черезuse. - Тело функции:
fn- только одно выражение, замыкания - произвольный код. - Изменяемость: В
fnпеременные захватываются по значению и не могут быть изменены внутри; в замыканиях можно передать по ссылке (use (&$var)). - Синтаксис:
fn($arg) => exprпротивfunction($arg) use ($var) { ... }.
Таким образом, fn - это лаконичная альтернатива для простых операций, а замыкания - для более сложной логики с контролем захвата переменных.
> Похожие задачи по PHP
Зачем нужен и как работает Dependency Injection в Symfony
Какие альтернативы наследованию существуют
Для чего нужны магические методы в PHP
В чем отличие массивов в PHP от массивов в других языках
> Похожие задачи по backend
Зачем нужен и как работает Dependency Injection в Symfony
Какие альтернативы наследованию существуют
Для чего нужны магические методы в PHP
В чем отличие массивов в PHP от массивов в других языках
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью