← Назад к вопросам

Что такое анонимная функция?

1.0 Junior🔥 181 комментариев
#PHP Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое анонимная функция?

Анонимная функция (также известная как замыкание или lambda) — это функция без имени, которая может быть присвоена переменной или передана как параметр в другую функцию.

Синтаксис в PHP

// Простая анонимная функция
$greet = function(string $name) {
    return "Hello, " . $name;
};

echo $greet("World"); // Hello, World

Ключевые характеристики

1. Присвоение переменной

$multiply = function(int $a, int $b) {
    return $a * $b;
};

echo $multiply(5, 3); // 15

2. Передача как аргумент

function apply(callable $callback, $value) {
    return $callback($value);
}

$result = apply(function($x) { return $x * 2; }, 5); // 10

3. Возврат из функции

function createMultiplier($factor) {
    return function($x) use ($factor) {
        return $x * $factor;
    };
}

$double = createMultiplier(2);
echo $double(5); // 10

Замыкания (Closures) с use

$multiplier = 5;
$multiply = function($x) use ($multiplier) {
    return $x * $multiplier;
};

echo $multiply(10); // 50

Передача по ссылке:

$counter = 0;
$increment = function() use (&$counter) {
    $counter++;
};

$increment();
$increment();
echo $counter; // 2

Типизация в PHP 7.4+

$calculator = function(int $a, int $b): int {
    return $a + $b;
};

echo $calculator(3, 4); // 7

Использование в array_map, array_filter

$numbers = [1, 2, 3, 4, 5];

// Фильтрация
$evens = array_filter($numbers, function($n) {
    return $n % 2 === 0;
}); // [2, 4]

// Трансформация
$doubled = array_map(function($n) {
    return $n * 2;
}, $numbers); // [2, 4, 6, 8, 10]

Arrow Functions (PHP 7.4+)

// Короткая запись анонимной функции
$multiply = fn($x, $y) => $x * $y;
echo $multiply(3, 4); // 12

// С автоматическим use
$factor = 5;
$multiply = fn($x) => $x * $factor; // $factor автоматически доступен
echo $multiply(10); // 50

Практические примеры

Callback для обработки данных:

$users = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
];

$names = array_map(function($user) {
    return $user['name'];
}, $users); // ['Alice', 'Bob']

Lazy evaluation:

$expensiveOperation = function() {
    return expensive_calculation();
};

// Функция не выполняется пока её не вызовут
if (someCondition()) {
    $result = $expensiveOperation();
}

Использование с usort:

$people = [
    ['name' => 'Alice', 'age' => 30],
    ['name' => 'Bob', 'age' => 25],
];

usort($people, function($a, $b) {
    return $a['age'] - $b['age'];
});

Разница между Closure и callable

// Closure (класс Closure)
$closure = function() { return 'Hello'; };

// callable - это интерфейс/тип, может быть:
// - анонимная функция
// - именованная функция 'strlen'
// - метод класса [$object, 'method']
// - статический метод [ClassName::class, 'method']

function execute(callable $fn) {
    return $fn();
}

execute($closure); // OK
execute('strlen'); // OK

Преимущества анонимных функций

  • Инкапсуляция — логика локальна
  • Гибкость — можно передавать разные функции
  • Читаемость — код явно показывает что происходит
  • Функциональный стиль — интеграция с map, filter, reduce

Когда использовать

  • Callbacks — array_map, array_filter, usort
  • Event handlers — обработка событий
  • Lazy evaluation — отложенное вычисление
  • Higher-order functions — функции высшего порядка

Заключение: Анонимные функции — это мощный инструмент функционального программирования в PHP, позволяющий писать более гибкий и чистый код.

Что такое анонимная функция? | PrepBro