匿名函数
参考
- https://www.php.net/manual/zh/language.types.callable.php
- https://www.php.net/manual/zh/functions.anonymous.php
参考的手册,大部分copy手册学习一下。
匿名函数
定义
- 匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
- 匿名函数目前是通过 Closure 类来实现的。
匿名函数一般被回调函数使用。
回调函数对匿名函数的调用
一些函数如call_user_func()
或usort()
可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。
例子:
<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
return strtoupper($match[1]);
}, 'hello-world');
// 输出 helloWorld
?>
匿名函数变量赋值示例
简单例子
<?php
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
?>
使用USE
- 闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。
PHP7.1
起,不能传入此类变量:superglobals
、$this
或者和参数重名。
<?php
$message = 'hello';
$example = function () {
var_dump($message);
};
#echo $example(); // Notice: Undefined variable: message
$example = function () use ($message) {
var_dump($message);
};
echo $example(); // string(5) "hello"
$message = 'world';
echo $example(); //string(5) "hello"
$example = function ($arg) use ($message) {
var_dump($arg . ' ' . $message);
};
$example("hello"); // string(11) "hello world"
?>