搜索
首页后端开发PHP7PHP 7.4中的箭头函数(Arrow Functions)

短闭包,也称为箭头函数,是在PHP中编写短函数的一种方式。这种表示法在将闭包传递给array_map或array_filter等函数时非常有用。

它们是这样的:

// A collection of Post objects
$posts = [/* … */];
$ids = array_map(fn($post) => $post->id, $posts);

在此之前,你必须这样写:

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

让我们总结一下如何使用短闭包。

● 自PHP 7.4起可用

● 他们以fn关键字开头

● 它们只能有一个表达式,即return语句

● 不允许return关键字

● 参数和返回类型可以是类型提示

上面示例的更严格类型的编写方式可能是:

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

还有两件事要提到:

● 允许使用扩展操作符

● 允许引用,两个参数都可以作为返回值

如果你想通过引用返回一个值,应该使用以下语法:

fn&($x) => $x

简而言之,除了仅允许一个表达式之外,短闭包还具有与普通闭包相同的功能。

# 没有多行

您没看错:短闭包只能有一个表达式。这意味着您不能包含多行。

理由如下:

简短闭包的目标是减少冗长。fn当然在所有情况下都比function短。然而,RFC的创建者Nikita Popov认为,如果您处理的是多行函数,那么使用短闭包所获得的好处就更少。

毕竟,按照定义,多行闭包已经更加冗长;因此能够跳过两个关键字(function和return)不会有太大的区别。

您是否同意这种观点取决于您自己。尽管我可以在项目中想到许多单行闭包,但也有很多多行闭包,在这些情况下,我个人会错过简短的语法。

不过还是有希望的:将来有可能添加多行短闭包,但这只是一个RFC。

#来自外部范围的值

短闭包和普通闭包之间的另一个显著区别是,短闭包不需要use关键字能够从外部范围访问数据。

$modifier = 5;
array_map(fn($x) => $x * $modifier, $numbers);

需要注意的是,不允许修改外部作用域中的变量。值是受值约束的,而不是受引用约束的。这意味着您可以在短闭包中更改$modifier,尽管它不会影响外部作用域中的$modifier变量。

当然有一个例外是$this关键字,它的作用与普通的闭包完全相同:

array_map(fn($x) => $x * $this->modifier, $numbers);

#未来的可能性

我已经提到了多行短闭包,这仍然是未来的一种可能性。

另一个想法是允许类中的短闭包语法,例如getter和setter:

class Post {
    private $title;
 
    fn getTitle() => $this->title;
}

总而言之,短闭包是一个受欢迎的特性,尽管仍有改进的空间。最大的一个可能是多行短闭包

翻译:https://stitcher.io/blog/short-closures-in-php

以上是PHP 7.4中的箭头函数(Arrow Functions)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。