> Что такое анонимная функция (PHP)

Уровень: junior · Роль: backend · Язык: PHP · Категория: Технические вопросы

Компании: vanta

Стек: PHP, Go, Android

> Пример ответа

Короткий ответ

Анонимная функция - это функция без имени, которую можно объявить прямо в месте использования и присвоить переменной, передать как аргумент или вернуть из другой функции. В PHP такие функции создаются через конструкцию function() {} и часто используются с array_map, usort, а также как callable для обратных вызовов. В Go анонимные функции - это замыкания, которые могут захватывать переменные из внешней области видимости.

Подробное объяснение

Анонимная функция - это функция, которая не имеет объявленного имени. В отличие от обычной именованной функции, её нельзя вызвать по имени, но можно сохранить в переменную и вызвать через неё, либо передать как аргумент в другую функцию.

В PHP анонимные функции появились в версии 5.3. Они реализуют интерфейс Closure. Ключевая особенность - возможность захвата переменных из внешней области видимости через конструкцию use. Без use анонимная функция не видит переменные родительской области.

В Go анонимные функции - это полноценные замыкания. Они автоматически захватывают переменные из внешней области, и это работает без специального синтаксиса. В Go анонимные функции часто используются для горутин и defer.

Основное назначение анонимных функций:

  • колбэки для функций высшего порядка (array_map, usort, filter)
  • обработчики событий
  • замыкания для инкапсуляции состояния
  • передача поведения как данных

На практике

В PHP анонимные функции часто применяются при работе с массивами и в middleware. Например, при сортировке с нестандартным критерием или при фильтрации данных. Также они используются в популярных фреймворках - Laravel, Symfony - для определения маршрутов и middleware.

В Go анонимные функции - стандартный инструмент для работы с горутинами, отложенными вызовами и для создания замыканий, которые сохраняют состояние между вызовами.

Важно помнить: в PHP анонимная функция без use не имеет доступа к внешним переменным, а в Go - имеет. Это принципиальное различие, которое часто проверяют на собеседованиях.

Пример кода

PHP:

PHP
$numbers = [1, 2, 3, 4, 5];
// анонимная функция как колбэк для array_map
$squared = array_map(function($n) {
return $n * $n;
}, $numbers);
// захват внешней переменной через use
$multiplier = 3;
$multiplied = array_map(function($n) use ($multiplier) {
return $n * $multiplier;
}, $numbers);
// анонимная функция, присвоенная переменной
$greet = function($name) {
return "Hello, $name";
};
echo $greet("Alice");

Go:

GO
package main
import "fmt"
func main() {
numbers := []int{1, 2, 3, 4, 5}
// анонимная функция как замыкание
multiplier := 3
multiply := func(n int) int {
return n * multiplier // захват переменной автоматически
}
for _, n := range numbers {
fmt.Println(multiply(n))
}
// анонимная функция для горутины
go func() {
fmt.Println("goroutine done")
}()
}

Как отвечать на собеседовании

Начни с определения: анонимная функция - это функция без имени. Затем приведи пример использования в PHP и Go. Обязательно упомяни разницу в захвате переменных: в PHP нужен use, в Go - нет. Покажи, что понимаешь, где это применяется на практике: колбэки, сортировка, middleware, горутины.

Если спросят про замыкания - объясни, что анонимная функция, захватывающая внешние переменные, становится замыканием. Приведи пример, где замыкание сохраняет состояние между вызовами.

Говори уверенно, но без лишней детализации. Для junior достаточно показать понимание базовой концепции и умение применить её в коде.

Что проверяет интервьюер

Интервьюер проверяет:

  • понимание базовой концепции функции как значения
  • знание синтаксиса анонимных функций в PHP и Go
  • понимание механизма захвата переменных (замыкания)
  • умение применять анонимные функции в реальных сценариях
  • осознание различий между PHP и Go в этом вопросе

Для junior это проверка базовых знаний языка и способности объяснить простую концепцию своими словами. Если кандидат путается в use или не может привести пример - это сигнал о слабой подготовке.

Типичные ошибки

  • утверждение, что анонимная функция в PHP видит внешние переменные без use - это неверно
  • путаница между анонимной функцией и замыканием: замыкание - это анонимная функция, которая захватывает переменные
  • попытка вызвать анонимную функцию по имени - так нельзя
  • забывают, что в Go анонимная функция автоматически захватывает внешние переменные, и пытаются искать аналог use
  • непонимание, зачем вообще нужны анонимные функции, если есть именованные - не могут привести пример использования

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью