匿名函数与闭包
Closure 类、箭头函数 fn()、use 捕获变量、回调
匿名函数与闭包
PHP 的闭包是 Closure 类的实例——可以赋值、传参、从函数返回。箭头函数(PHP 7.4+)让简短回调更简洁。
学完本章你将: 掌握 Closure、箭头函数 fn()、use 捕获、回调。
匿名函数基础
php
<?php
// 赋值给变量
$greet = function(string $name): string {
return "Hello, $name!";
};
echo $greet("World"); // Hello, World!
// 作为回调参数
$numbers = [1, 2, 3, 4, 5];
$even = array_filter($numbers, function(int $n): bool {
return $n % 2 === 0;
});
箭头函数 fn()(PHP 7.4+)
php
<?php
// 自动捕获外部变量(按值),只能包含一个表达式
$factor = 10;
$double = fn(int $n): int => $n * $factor;
echo $double(5); // 50
// 数组操作的神器
$doubled = array_map(fn($n) => $n * 2, $numbers);
💡 箭头函数自动按值捕获外部变量,不需要
use。但只支持单个表达式。
闭包的 use 捕获
php
<?php
$message = "Hello";
// 按值捕获
$greet = function($name) use ($message) {
return "$message, $name";
};
$message = "Hi";
echo $greet("World"); // "Hello, World"(捕获的是赋值时的值)
// 按引用捕获
$greet2 = function($name) use (&$message) {
return "$message, $name";
};
$message = "Hi";
echo $greet2("World"); // "Hi, World"(引用,跟踪最新值)