Анонимные функции, также известные как замыкания (closures) — это функции без имени, которые могут быть:
<?php
$greet = function($name) {
return "Привет, $name!";
};
echo $greet('Мир'); // Выведет: Привет, Мир!
use
:<?php
$prefix = 'Уважаемый';
$greet = function($name) use ($prefix) {
return "$prefix $name!";
};
<?php
$count = 0;
$increment = function() use (&$count) {
$count++;
};
<?php
$numbers = [1, 2, 3];
$squared = array_map(function($n) { return $n * $n; }, $numbers);
Характеристика | Обычная функция | Анонимная функция |
---|---|---|
Имя | Обязательно | Отсутствует |
Область видимости | Глобальная | Текущий контекст |
Использование use | Нет | Да (для замыканий) |
Вызов | По имени | Через переменную |
<?php
$result = (function($x) {
return $x * 2;
})(5); // 10
<?php
class Calculator {
private $factor;
public function __construct($factor) {
$this->factor = $factor;
}
public function getMultiplier() {
return function($x) {
return $x * $this->factor;
};
}
}
<?php
function createMultiplier($factor) {
return function($x) use ($factor) {
return $x * $factor;
};
}
$double = createMultiplier(2);
echo $double(5); // 10
<?php
$dispatcher = new EventDispatcher();
$dispatcher->addListener('user.login', function($event) {
// Обработка события
});
<?php
$sum = function(int $a, int $b): int {
return $a + $b;
};
<?php
$func1 = function() {};
$func2 = function() {};
var_dump($func1 == $func2); // false
<?php
$func = function() {};
serialize($func); // Ошибка!
<?php
$createTemplate = function($template) {
return function($data) use ($template) {
extract($data);
ob_start();
eval('?>' . $template);
return ob_get_clean();
};
};
<?php
$middleware = [
function($request, $next) { /* ... */ },
function($request, $next) { /* ... */ }
];
<?php
$lazyValue = function() {
// Тяжелые вычисления
return computeSomething();
};