// A collection of Post objects
$posts = [/* … */];
$ids = array_map(fn($post) => $post->id, $posts);
上面这个代码等同于下面
$ids = array_map(function ($post) {
return $post->id;
}, $posts);
使用时有几个注意事项:
- php7.4才开始支持此语法
- 以fn关键字开始
- 只允许有一条语句,一般是return 那句话
- return关键字可以省略
- 参数类型和返回类型可以声明
声明类型写法如下:
$ids = array_map(fn(Post $post): int => $post->id, $posts);
如果你想返回一个引用类型,可以这么写:
fn&($x) => $x
还有个特性,在匿名函数里面,引入外部变量时,不需要显式use那个变量
$modifier = 5;
array_map(fn($x) => $x * $modifier, $numbers);
以上的代码,$modifier变量在闭包函数中修改值后,在外部的$modifier不会改变其值,但是$this关键字是给例外。
array_map(fn($x) => $x * $this->modifier, $numbers);