1. 程式人生 > 實用技巧 >php中匿名(閉包)函式以及function use的用法

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

匿名函式(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