搜尋
首頁後端開發PHP7細說---PHP 7.4 新增的箭頭函數

細說---PHP 7.4 新增的箭頭函數

短閉包,也叫做箭頭函數,是一種用php 寫的短函數.當向函數傳遞閉包時,這個功能是非常有用的,例如使用array_map 或是array_filter函數時.

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

// Post 对象的集合
$posts = [/* … */];
$ids = array_map(fn($post) => $post->id, $posts);

而以前,你必須這樣寫:

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

我們來總結一下短閉包函數如何使用.

在PHP 7.4 裡可用

以fn 關鍵字開頭只能包含一個表達式,即傳回表達式return 關鍵字可忽略參數與傳回型別皆可做型別暗示

上面範例較嚴格的型別限定寫法可寫:

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

#有兩點需要提及:

##也允許使用擴充運算子允許引用,兩個參數都可以作為傳回值

假如你想要透過引用的方式傳回結果,應該使用以下語法:

fn&($x) => $ x

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

單行

你應該正確的理解它:短閉包只能有一個表達式。這意味著閉包體中不能有多行。

原因如下:短閉包的目的是為了減少冗餘。當然,在任何情況下, fn 都比 function 短。然而, RFC 的創建者 Nikita Popov 認為,如果你要處理的是多行表達式的函數,那麼使用閉包獲得的益處就更少了。

畢竟,多行閉包的定義已經很冗餘了,所以,有和沒有這2個關鍵字( function 和 return )將不會有太大差別。

你是否同意這個觀點取決於你自己。雖然我可以在我的專案中想到很多單行閉包的場景,但也有很多多行閉包的情況,從個人角度,我會喜歡這些情況下的簡短語法。

不過還是有希望的:未來可能會增加多行短閉包,但那也是一個單獨的 RFC 。

外部作用域的值

短閉包和普通閉包的另一個顯著特徵是,短閉包不需要用 use 關鍵字就能存取外部作用域的資料。

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

要注意的是,不能修改外部範圍中的變數。因為它屬於值傳遞而不是引用傳遞。這意味著你可以改變短閉包內的 $modifier 變量,但它不會對外在作用域中的 $modifier 變數產生影響。

當然,有一個例外,那就是$this 關鍵字,它的作用與普通閉包中的作用完全相同:

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

發展前景

我已經提到過的多行閉包仍然是將來的一個發展可能.另一個在我腦海中的想法就是在允許在類中使用短閉包,比如getters 和setters 函數.

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

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

推薦學習:
PHP視頻教程

以上是細說---PHP 7.4 新增的箭頭函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:jb51。如有侵權,請聯絡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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具