Комментарии (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, позволяющий писать более гибкий и чистый код.