php匿名函数可直接作为回调传入array_map等函数,需用function()定义并加分号;通过use捕获外部变量,支持值传递和引用传递;可赋值变量或类属性复用,但不可序列化;配合callable类型提示和is_callable校验提升健壮性。

PHP中匿名函数可以直接作为回调参数传递给支持回调的函数,比如 array_map、usort、preg_replace_callback 等,无需先赋值给变量,但需注意语法细节和作用域限制。
直接在函数调用中定义并传入
最常见的方式是在调用接受回调的函数时,直接内联定义匿名函数。PHP 5.3+ 支持此写法,语法简洁:
- 用
function()关键字声明,括号内写参数,花括号内写逻辑 - 末尾必须带分号(因为是表达式语句)
- 示例:
array_map(function($n) { return $n * 2; }, [1, 2, 3]);返回[2, 4, 6]
使用 use 关键字捕获外部变量
匿名函数默认无法访问所在作用域的变量,需显式用 use 列出要引入的变量:
-
use ($var)按值捕获(副本),use (&$var)按引用捕获(可修改原变量) - 不能直接访问全局变量或超全局数组(如
$_GET),需显式传入 - 示例:
$multiplier = 3; array_map(function($n) use ($multiplier) { return $n * $multiplier; }, [1, 2]);
作为方法参数或类属性存储
匿名函数可赋值给变量或类属性,再作为回调传入,适合复用或延迟执行:
- 赋值后变量本身就是一个可调用对象,可直接传参:
$callback = function($x) { return $x > 0; }; array_filter([−1, 0, 1], $callback); - 类中可将匿名函数存为属性:
$this->validator = function($input) { return is_string($input); };,调用时用call_user_func($this->validator, $value) - 注意:序列化匿名函数会失败,不可用于缓存或跨请求持久化
与 callable 类型提示和类型检查配合
PHP 7.1+ 支持 callable 类型声明,能提升代码健壮性:
- 函数参数可声明为
callable $callback,PHP 会自动校验是否可调用 - 运行时可用
is_callable($callback)预判,避免调用失败 - 匿名函数属于
Closure类实例,gettype($fn) === 'object'且$fn instanceof Closure
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











