欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          PHP 7.4中的箭頭函數(shù)(Arrow Functions)

          短閉包,也稱為箭頭函數(shù),是在PHP中編寫短函數(shù)的一種方式。這種表示法在將閉包傳遞給array_map或array_filter等函數(shù)時(shí)非常有用。

          它們是這樣的:

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

          在此之前,你必須這樣寫:

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

          讓我們總結(jié)一下如何使用短閉包。

          ● 自PHP 7.4起可用

          ● 他們以fn關(guān)鍵字開頭

          ● 它們只能有一個(gè)表達(dá)式,即return語句

          ● 不允許return關(guān)鍵字

          ● 參數(shù)和返回類型可以是類型提示

          上面示例的更嚴(yán)格類型的編寫方式可能是:

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

          還有兩件事要提到:

          ● 允許使用擴(kuò)展操作符

          ● 允許引用,兩個(gè)參數(shù)都可以作為返回值

          如果你想通過引用返回一個(gè)值,應(yīng)該使用以下語法:

          fn&($x) => $x

          簡而言之,除了僅允許一個(gè)表達(dá)式之外,短閉包還具有與普通閉包相同的功能。

          # 沒有多行

          您沒看錯(cuò):短閉包只能有一個(gè)表達(dá)式。這意味著您不能包含多行。

          理由如下:

          簡短閉包的目標(biāo)是減少冗長。fn當(dāng)然在所有情況下都比function短。然而,RFC的創(chuàng)建者Nikita Popov認(rèn)為,如果您處理的是多行函數(shù),那么使用短閉包所獲得的好處就更少。

          畢竟,按照定義,多行閉包已經(jīng)更加冗長;因此能夠跳過兩個(gè)關(guān)鍵字(function和return)不會(huì)有太大的區(qū)別。

          您是否同意這種觀點(diǎn)取決于您自己。盡管我可以在項(xiàng)目中想到許多單行閉包,但也有很多多行閉包,在這些情況下,我個(gè)人會(huì)錯(cuò)過簡短的語法。

          不過還是有希望的:將來有可能添加多行短閉包,但這只是一個(gè)RFC。

          #來自外部范圍的值

          短閉包和普通閉包之間的另一個(gè)顯著區(qū)別是,短閉包不需要use關(guān)鍵字能夠從外部范圍訪問數(shù)據(jù)。

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

          需要注意的是,不允許修改外部作用域中的變量。值是受值約束的,而不是受引用約束的。這意味著您可以在短閉包中更改$modifier,盡管它不會(huì)影響外部作用域中的$modifier變量。

          當(dāng)然有一個(gè)例外是$this關(guān)鍵字,它的作用與普通的閉包完全相同:

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

          #未來的可能性

          我已經(jīng)提到了多行短閉包,這仍然是未來的一種可能性。

          另一個(gè)想法是允許類中的短閉包語法,例如getter和setter:

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

          總而言之,短閉包是一個(gè)受歡迎的特性,盡管仍有改進(jìn)的空間。最大的一個(gè)可能是多行短閉包

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

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)