php匿名函數的使用

2020-07-16 10:06:12

匿名函數的提出

在匿名函數出現之前,所有的函數都需要先命名才能使用

1f4ec908e3605797b0aeeaf446c3a35.png

有的時候函數可能只需要使用一次,這時候使用匿名函數會使得程式碼更加簡潔直觀,同時也避免了函數在其他地方被使用

e48eb87fec77ff21022cda079509ca8.png

(免費學習視訊教學分享:php視訊教學

匿名函數的定義與使用

PHP 將閉包和匿名函數視為同等概念(本文統稱為匿名函數),本質上都是偽裝成函數的物件。

匿名函數的本質是物件,因此跟物件一樣可將匿名函數賦值給某一變數

36f6c2a7fa2907dca462fed2826048c.png

所有的匿名函數都是 Closure 物件的範例

53b8635528e32aee44255805ba3f4bc.png

物件並沒有什麼父作用域可言,所以需要使用 use 來手動宣告使用的變數

ff691d577ad1fa84f52e0cd7fdfcf18.png

如果要讓匿名函數中的變數生效,需要使用參照傳值

5924fceea31d021ca4cbb5f74566ad4.png

從 PHP 5.4 開始,在類裡面使用匿名函數時,匿名函數的 $this 將自動系結到當前類

4e5923512ad1145f37444741b2ce8ec.png

如果不想讓自動系結生效,可使用靜態匿名函數

7af83a9dd441219ced864dd1970c69d.png

匿名函數的本質

匿名函數的本質是 Closure 物件,包括了以下五個方法

0f24bffd014bb50a182416dde394802.png

__construct - 防止匿名函數被範例化

9e832513aa6bdfad965016ee14b5c7c.png

Closure::bindTo - 複製當前匿名函數物件,係結指定的 $this 物件和類作用域。通俗的說,就是手動將匿名函數與指定物件系結,利用這點,可以為擴充套件物件的功能。

cbdf4e8354113659385dbfe5383c5c6.png

Closure::bind - bindTo 方法的靜態版本,有兩種用法:

用法一:實現與 bindTo 方法同樣的效果

7f80239a8eb83ad0c184df6825cfc6a.png

用法二:將匿名函數與類(而不是物件)係結,記得要將第二個引數設定為 null

366c7ca7daf6ba831c5305310ca7bbb.png

call - PHP 7 新增的 call 方法可以實現系結並呼叫匿名函數,除了語法更加簡潔外,效能也更高

b8e9875a0cc980705fc52e9d08daa62.png

fromCallable - 將給定的 callable 函數轉化成匿名函數

e51a2dd84e475459aed6f52013c7241.png

fromCallable 等價於

e1dafa77518a1ce90da5b3527c53d14.png

這裡有一點需要特別注意的是,無論是 fromCallable 轉化成的閉包,還是使用反射得到的閉包,在使用 bindTo 時,如果第二個引數指定系結類,會報錯

735179353cd44fd2d022f00101c9237.png

以上就是php匿名函數的使用的詳細內容,更多請關注TW511.COM其它相關文章!