Z
ZHANK
编程在线教程PHP 教程匿名函数与闭包
函数

匿名函数与闭包

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"(引用,跟踪最新值)