php中匿名(閉包)函數以及function use的用法


在PHP中,匿名函數(Anonymous functions),也叫閉包函數(closures),允許 臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值。當然,也有其它應用的情況。

匿名函數目前是通過 Closure 類來實現的。(摘自官方文檔

1、簡單示例

定義一個函數,並沒有指定名稱,再指定一個參數

1 $fun = function ($variable) { 2   echo $variable . '---'; 3 }; 4 $a = '123'; //變量$a定義在匿名函數定義前,還是后,結果是一樣的
5 $fun($a); 6 // 運行結果為: 123---

2、未使用 use

如果不使用use ,則不能在匿名函數中調用變量$b。

1 $b = '456'; 2 $fun = function ($variable) { 3     echo $variable .'---'. $b; 4 }; 5 $a = '123'; 6 $fun($a); 7 // 輸出結果為 ErrorException 未定義變量 b

3、使用use

借助關鍵字use之后,就可以調用變量$b了

1 $a = '123'; 2 $b = '456';// 此時,變量$b必須定義在匿名函數定義前
3 $fun = function ($variable) use($b) { 4     echo $variable .'---'. $b; 5 }; 6 $fun($a); 7 // 輸出結果是 123---456

前提是變量$b必須在匿名函數定義之前,否則依然會提示未定義變量 b

4、不使用&

 1 $a = '123';  2 $b = '456';// 此時,變量$b必須定義在匿名函數定義前
 3 $fun = function ($variable) use($b) {  4     echo $variable .'---'. $b;  5 };  6 $fun($a);  7 // 輸出結果是 123---456
 8 $b = 5678;  9 $fun($a); 10 // 輸出結果依然是 123---456

示例4中,雖然修改了變量b的值,但是結果依然是123—456,因為匿名函數在定義時已經保存了變量b的值,這也是證明了為何$b必須定義在匿名函數定義之前的原因了,因為在定義時,會保存這個值,如果要想隨着外界修改而自動更新,則就使用引用傳遞了,即&

5、使用&

 1 $a = '123';  2 $b = '456';  3 $fun = function ($variable) use(&$b) {  4     echo $variable .'---'. $b;  5 };  6 $fun($a);  7 // 輸出結果是 123---456
 8 $b = 5678;  9 $fun($a); 10 // 輸出結果變為 123---5678

備注:以上調試php版本是7.3.4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM