php中匿名(閉包)函式以及function use的用法
阿新 • • 發佈:2020-10-09
匿名函式(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