Closures and arrow functions

Anonymous functions

A closure is a function value without a name. Store it in a variable and call it like a normal function. It keeps code local when a helper is needed only once.

Add parameter and return types exactly as you would for a named function.

$add = function (int $a, int $b): int { return $a + $b; }; echo $add(2, 3);

Capture with use

Closures do not see outer variables by default. List needed names in a use clause to capture them by value at creation time.

Capture keeps the data flow explicit and avoids hidden dependence on globals.

$factor = 3; $mul = function (int $x) use ($factor): int { return $x * $factor; }; echo $mul(10);

fn arrow functions

The short fn form fits one expression callbacks. It captures outer variables automatically by value, so no use clause is needed.

Use it for mapping, filtering, and sorting where the logic fits on one line.

$factor = 3; $mul = fn(int $x): int => $x * $factor; $nums = [1, 2, 3]; var_dump(array_map($mul, $nums));

Pass callables around

Many core functions accept a callable to customize behavior. Pass a closure, an arrow function, a function name as a string, or an array with an object and a method name.

Modern PHP also offers first-class callable syntax with three dots, which creates a closure from any callable without writing a wrapper.

$words = ["pear", "apple", "fig"]; usort($words, fn(string $a, string $b): int => strlen($a) <=> strlen($b)); $fn = strlen(...); echo $fn("hello");

Next: Generators with yield

Автор статьи: Arthur Isaev