• 技术文章 >后端开发 >PHP7

    PHP 7.4中的箭头函数(Arrow Functions)

    藏色散人藏色散人2019-11-30 11:58:51原创1626
    短闭包,也称为箭头函数,是在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中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:PHP 7.4
    上一篇:PHP7中异常与错误处理与之前版本对比 下一篇:PHP 7.4中的类型属性(Typed Properties)
    大前端线上培训班

    相关文章推荐

    • PHP7.2中的新功能(参数类型声明)• WINDOWS下用VSCODE调试PHP7源代码• PHP7中异常与错误处理与之前版本对比• PHP 如何处理金额• PHP如何操作Cookie?• PHP如何基于redis的分布式锁防止高并发重复请求• PHP 7.4.0刚刚发布!一起看看有哪些新特性

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网