首頁 後端開發 PHP7 PHP 7.4中的箭頭函數(Arrow Functions)

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

Nov 30, 2019 am 11:58 AM
PHP 7.4

短閉包,也稱為箭頭函數,是在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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)