PHP

PHP的箭头函数

php7.4的新特性

Posted by hughnian on October 20, 2020

箭头函数,这个名词应该不会陌生了,因为在很多其他语言里都已经有了,尤其是es6这样的语法中,更是早,而且还有很多其他各种奇技淫巧的语法( ̄▽ ̄)”。

箭头函数也叫短闭包,是一种用php编写的短函数。当向函数中传递闭包时,这个功能是非常有用的,比如使用array_map,array_wakl,array_filter

在php中写的是这个样子

// Post 对象的集合
$posts = /* … */;

$ids = array_map(fn($post) => $post->id, $posts);

而他以前的写法是这个样子

$ids = array_map(function($post) {
    return $post->id;
}, $post);

来总结一下新的函数使用注意事项:

  • 1.在PHP 7.4里可用
  • 2.以fn关键字开头
  • 3.只能包含 一个 表达式, 即返回表达式
  • 4.return关键字可忽略
  • 5.参数和返回类型均可做类型暗示

根据上面的第5条可以之前的例子可以写成这样

$ids = array_map(fn(Post $post) :int => $post->id, $posts);

两点需要提及

  • 还允许使用扩展操作符
  • 允许引用,两个参数都可以作为返回值

假如你想使用引用作为返回值,需要写成这样

fn&($x) => $x

简而言之,除了只有一个表达式以外,短闭包和普通闭包的功能是一样的。