成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP 7.4 新語法:箭頭函數(shù)

darcrand / 2154人閱讀

摘要:原因如下短閉包的目的是為了減少冗余。然而,的創(chuàng)建者認(rèn)為,如果你要處理的是多行表達(dá)式的函數(shù),那么使用閉包獲得的益處就更少了。這意味著你可以改變短閉包內(nèi)的變量,但它不會(huì)對外部作用域中的變量產(chǎn)生影響。


短閉包,也叫做箭頭函數(shù),是一種用 php 編寫的短函數(shù).當(dāng)向函數(shù)中傳遞閉包時(shí),這個(gè)功能是非常有用的,比如使用 array_map 或是 array_filter函數(shù)時(shí).

這就是它們看起來的樣子:

// Post 對象的集合
$posts = [/* … */];

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

而以前,你必須這樣寫:

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

我們來總結(jié)一下短閉包函數(shù)如何使用.

在 PHP 7.4 里可用

fn 關(guān)鍵字開頭

只能包含 一個(gè) 表達(dá)式, 即返回表達(dá)式

return 關(guān)鍵字可忽略

參數(shù)和返回類型均可做類型暗示

上面示例更嚴(yán)格的類型限定寫法可寫作:

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

有兩點(diǎn)需要提及:

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

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

假如你想要通過引用的方式返回結(jié)果,應(yīng)該使用以下語法:

fn&($x) => $x

簡而言之,除了只允許一個(gè)表達(dá)式以外,簡短的閉包和普通閉包的功能是一樣的。

單行

你應(yīng)該正確的理解它:短閉包只能有一個(gè)表達(dá)式。這意味著閉包體中不能有多行。

原因如下:短閉包的目的是為了減少冗余。當(dāng)然,在任何情況下, fn 都比 function 短。然而, RFC 的創(chuàng)建者 Nikita Popov 認(rèn)為,如果你要處理的是多行表達(dá)式的函數(shù),那么使用閉包獲得的益處就更少了。

畢竟,多行閉包的定義已經(jīng)很冗余了,所以,有和沒有這2個(gè)關(guān)鍵字( functionreturn )將不會(huì)有太大區(qū)別。

你是否同意這個(gè)觀點(diǎn)取決于你自己。雖然我可以在我的項(xiàng)目中想到很多單行閉包的場景,但也有很多多行閉包的情況,從個(gè)人角度,我會(huì)喜歡這些情況下的簡短語法。

不過還是有希望的:未來可能會(huì)添加多行短閉包,但那也是一個(gè)多帶帶的 RFC 。

外部作用域的值

短閉包和普通閉包的另一個(gè)顯著特征是,短閉包不需要用 use 關(guān)鍵字就能訪問外部作用域的數(shù)據(jù)。

$modifier = 5;

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

需要注意的是,不能修改外部范圍中的變量。因?yàn)樗鼘儆谥祩鬟f而不是引用傳遞。這意味著你可以改變短閉包內(nèi)的 $modifier 變量,但它不會(huì)對外部作用域中的 $modifier 變量產(chǎn)生影響。

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

array_map(fn($x) => $x * $this->modifier, $numbers);
發(fā)展前景

我已經(jīng)提到過的多行閉包仍然是將來的一個(gè)發(fā)展可能.另外一個(gè)在我腦海中的想法就是在允許在類中使用短閉包,比如 getterssetters 函數(shù).

class Post {
    private $title;

    fn getTitle() => $this->title;
}

總而言之,短閉包是一個(gè)很受歡迎的特性,盡管有很多地方需要提高.其中最有可能就是多行閉包了.

文章轉(zhuǎn)自:https://learnku.com/php/t/28219 

更多文章:https://learnku.com/php/c/tra...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31425.html

相關(guān)文章

  • PHP 7.4 特性

    摘要:原文來源預(yù)計(jì)在年年末就會(huì)正式發(fā)布了,本文先來看看一下的新特性。預(yù)加載預(yù)加載的實(shí)現(xiàn)理論上是可以為帶來很大的性能提升的。最后,你需要注意的向后不兼容特性,可以通過此鏈接來查看詳細(xì)內(nèi)容 原文來源:https://geixue.com/blogs/chan... PHP 7.4 預(yù)計(jì)在 2019 年年末就會(huì)正式發(fā)布了,本文先來看看一下 PHP 7.4 的新特性。 1.預(yù)加載預(yù)加載的實(shí)現(xiàn)理論上是...

    megatron 評論0 收藏0
  • PHP 7.4 特性

    摘要:預(yù)加載在框架啟動(dòng)時(shí)在內(nèi)存中加載文件,而且在后續(xù)請求中永久有效。缺點(diǎn)性能的提升會(huì)在其他方面花費(fèi)很大的代價(jià),每次預(yù)加載的文件發(fā)生改變時(shí),框架需要重新啟動(dòng)。 PHP 7.4 計(jì)劃在2019年11月21日發(fā)布,它主要新增了以下幾個(gè)特性: 短閉包函數(shù)(short closure) 預(yù)加載提交性能 屬性類型限定 Improved type variance(不會(huì)翻譯) 三元運(yùn)算簡寫 數(shù)組展開運(yùn)...

    CastlePeaK 評論0 收藏0
  • php7.4都要來了

    摘要:性能提升當(dāng)然需要付出代價(jià)如果預(yù)加載文件的來源發(fā)生變化,則必須重新啟動(dòng)服務(wù)器。應(yīng)該指出,這是一個(gè)復(fù)雜的主題。默認(rèn)情況下不啟用由于不再維護(hù),核心團(tuán)隊(duì)決定使用刪除其默認(rèn)安裝。將在錯(cuò)誤情況下拋出異常。請注意,強(qiáng)制轉(zhuǎn)換不受影響。 新特性 預(yù)加載預(yù)加載是PHP核心的一個(gè)驚人的補(bǔ)充,可以帶來一些重大的性能改進(jìn)。簡而言之:如果您今天使用的是框架,則必須在每次請求時(shí)加載和重新編譯其文件。 預(yù)加載允許服務(wù)...

    zhangrxiang 評論0 收藏0
  • PHP 7.4 前瞻:FFI

    摘要:擴(kuò)展已經(jīng)通過,正式成為的捆綁擴(kuò)展庫。第一步,從頭文件把主要的數(shù)據(jù)結(jié)構(gòu)和函數(shù)聲明復(fù)制出來目前不支持預(yù)處理器除了和,所以宏定義要自己展開。 FFI擴(kuò)展已經(jīng)通過RFC,正式成為PHP 7.4的捆綁擴(kuò)展庫(Bundled Extensions)。 什么是FFI FFI(Foreign Function Interface),即外部函數(shù)接口,是指在一種語言里調(diào)用另一種語言代碼的技術(shù)。PHP的FF...

    CompileYouth 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<