php闭包传参与普通函数一致,定义时声明参数并支持默认值、引用传参等;可通过use绑定外部变量(按值或引用);可作为参数传递给内置函数如array_map;支持立即调用(iife)。

PHP 闭包(匿名函数)传参调用和普通函数基本一致,关键在于定义时声明参数、调用时传入对应值。闭包本身是一个对象(Closure 类实例),可赋值给变量、作为参数传递、或直接调用。
定义时声明参数
在 function() 的括号内写形参,支持默认值、引用传参、可变参数等:
$greet = function($name, $age = 25) {
return "Hello, $name! You are $age years old.";
};
<p>// 调用:传实参
echo $greet('Alice'); // Hello, Alice! You are 25 years old.
echo $greet('Bob', 30); // Hello, Bob! You are 30 years old.
</p>使用 use 绑定外部变量
闭包可通过 use 关键字“捕获”定义时所在作用域的变量(按值或按引用):
$prefix = 'Mr.';
$suffix = '!';
<p>$format = function($name) use ($prefix, &$suffix) {
$suffix = strtoupper($suffix);
return $prefix . ' ' . $name . $suffix;
};</p><p>echo $format('John'); // Mr. John!
</p>-
use ($var):按值绑定,闭包内修改不影响外部 -
use (&$var):按引用绑定,闭包内可修改外部变量 -
use中不能放表达式,只能是变量名
作为参数传递给其他函数
很多内置函数(如 array_map、usort、preg_replace_callback)接受闭包。参数由调用方自动注入:
$numbers = [1, 2, 3, 4];
$doubled = array_map(function($n) {
return $n * 2;
}, $numbers); // [2, 4, 6, 8]
<p>// usort 的闭包接收两个参数(比较规则)
$fruits = ['lemon', 'apple', 'banana'];
usort($fruits, function($a, $b) {
return strlen($a) strlen($b); // 按长度排序
});
</p>立即调用闭包(IIFE)
定义后紧跟 () 直接执行,适合一次性逻辑:
$result = (function($x, $y) {
return $x + $y;
})(10, 20); // $result = 30
<p>// 带 use 的立即调用
$message = 'Done';
$run = (function() use ($message) {
echo $message . PHP_EOL;
})(); // 输出 Done
</p>php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











