匿名函数(也称为闭包或 lambda 函数)是一种不需要命名的函数,可以直接定义并使用。PHP 从 5.3.0 版本开始支持匿名函数。
基本语法
php
$functionName = function($parameters) {
// 函数体
return $value;
};
主要特点
没有函数名:直接通过变量来引用
可以作为值传递:可以赋值给变量,或作为参数传递
可以访问父作用域变量:通过 use 关键字(闭包特性)
基本示例
1. 简单匿名函数
php
$greet = function($name) {
return "Hello, $name!";
};
echo $greet("Alice"); // 输出:Hello, Alice!
2. 作为回调函数使用
php
$numbers = [1, 2, 3, 4];
// 使用匿名函数作为 array_map 的回调
$squared = array_map(function($n) {
return $n * $n;
}, $numbers);
print_r($squared); // 输出:[1, 4, 9, 16]
使用父作用域变量(闭包)
通过 use 关键字访问外部变量:
php
$prefix = "Mr. ";
$greet = function($name) use ($prefix) {
return "Hello, " . $prefix . $name;
};
echo $greet("Smith"); // 输出:Hello, Mr. Smith
在您的案例中的应用
您可以使用匿名函数简化代码:
php
$strings = ["apple", "orange", "banana", "coconut"];
// 使用匿名函数替代 my_callback
$lengths = array_map(function($item) {
return "$item=" . strlen($item);
}, $strings);
echo implode(", ", $lengths);
高级用法
1. 立即执行函数
php
$result = (function($x, $y) {
return $x + $y;
})(5, 3);
echo $result; // 输出:8
2. 作为对象方法
php
class Calculator {
public static function getMultiplier($factor) {
return function($num) use ($factor) {
return $num * $factor;
};
}
}
$double = Calculator::getMultiplier(2);
echo $double(5); // 输出:10
匿名函数的优势
简洁性:不需要单独定义命名函数
灵活性:可以动态创建函数
封装性:可以捕获外部变量形成闭包
适合回调:特别适合作为回调函数使用
注意事项
PHP 7.4+ 支持箭头函数(更简洁的匿名函数写法)
匿名函数内部不能直接访问 $this(除非绑定到对象)
过度使用可能影响代码可读性
箭头函数示例(PHP 7.4+):
php
$numbers = [1, 2, 3];
$squared = array_map(fn($n) => $n * $n, $numbers);
评论