站長資訊網
        最全最豐富的資訊網站

        PHP 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

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产成人精品午夜福麻豆| 2021最新国产精品一区| 在线欧美v日韩v国产精品v| 亚洲欧美日韩精品久久亚洲区| 国产精品久久久久久久久久免费| 欧美精品三区| 国产精品无码一区二区三区电影| 欧美亚洲国产精品久久蜜芽| 日韩av无码久久精品免费| 欧美精品1区2区| 成人精品视频一区二区三区 | 精品国产综合区久久久久久| 97精品伊人久久大香线蕉app| 999国产精品视频| 日韩精品久久久肉伦网站| 国产成人无码精品久久久久免费| 亚洲日韩国产精品第一页一区| 国产精品特级毛片一区二区三区| 亚洲国产精品专区在线观看| 国产成人精品怡红院在线观看| 午夜成人精品福利网站在线观看 | 亚洲国产精品无码久久SM | 亚洲无线观看国产精品| 亚洲国产成人精品91久久久| 精品无人区麻豆乱码1区2区 | 亚洲精品乱码久久久久久中文字幕 | 久久精品无码一区二区三区免费| 国产精品白浆在线观看免费| 久久久无码精品亚洲日韩按摩| 国产精品亚洲高清一区二区 | 亚洲AV无码久久精品蜜桃| 亚洲精品无码久久久| 午夜亚洲av永久无码精品| 午夜精品久久久久久影视777| 欧美日韩精品一区二区在线播放| 亚洲av永久无码精品表情包| 亚洲精品无码久久久久去q| 亚洲AV无码久久精品蜜桃| 蜜臀AV无码国产精品色午夜麻豆 | 国产精品1024视频| 国产福利在线观看精品|