Closures and arrow functions
| Anonymous functions | |
| Capture with use | |
| fn arrow functions | |
| Pass callables around |
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
Article author: Arthur Isaev