PHP 7.4中的箭头函数(Arrow Functions)
php  /  管理员 发布于 7年前   362
短闭包,也称为箭头函数,是在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)的详细内容,更多请关注其它相关文章!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号