溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中的箭頭函數怎么用

發布時間:2020-06-21 21:18:03 來源:億速云 閱讀:371 作者:鴿子 欄目:編程語言

短閉包,也稱為箭頭函數,是在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;
}

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

以上就是PHP 7.4中的箭頭函數(Arrow Functions)的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女