php中的匿名函数和闭包函数以及use的用法
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。
在php5.3.0 或以上才能使用,当然,也有其它应用的情况。
匿名函数目前是通过 Closure 类来实现的。
-
1,匿名函数
匿名函数的定义:
1 2 3 4 5 | $closureFunc = function(){ .... }; |
把匿名函数赋值给变量
1 2 3 4 5 6 7 8 | $closureFunc = function($str){ echo $str; }; $closureFunc("hello world!"); //hello world! |
-
2,闭包
将匿名函数放在普通函数中
1 2 3 4 5 6 7 8 | function closureFunc1(){ $func = function(){ echo "hello"; }; $func(); } closureFunc1(); //输出: hello |
在匿名函数中引用局部变量
1 2 3 4 5 6 7 8 9 | function closureFunc2(){ $num = 1; $func = function(){ echo $num; }; $func(); } closureFunc2(); //Notice: Undefined variable: num |
上面的函数运行后,会报Notice错误,说明我们不能在匿名函数中这样使用局部变量,这时候就要引用一个php的关键字 use, 代码如下
1 2 3 4 5 6 7 8 9 | function closureFunc2(){ $num = 1; $func = function() use($num){ echo $num; }; $func(); } closureFunc2(); //输出: 1 |
返回匿名函数
1 2 3 4 5 6 7 8 9 10 | function closureFunc3(){ $num = 1; $func = function() use($num){ echo $num; }; return $func; } $func = closureFunc3(); //函数返回匿名函数 $func(); //然后我们在用$func() 调用 //输出: 1 |
匿名函数传参
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function closureFunc4(){ $num = 1; $func = function($str) use($num){ echo $num; echo "\n"; echo $str; }; return $func; } $func = closureFunc4(); $func("hello, closure4"); //输出: //1 //hello, closure4 |
用闭包来改变上下文引用的变量值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function closureFunc5(){ $num = 1; $func = function() use($num) { echo "\n"; $num++; echo $num; }; echo "\n"; echo $num; return $func; } $func = closureFunc5(); $func(); $func(); $func(); //输出: // 1 // 2 // 2 // 2 |
看上面的输入结果,显然没有达到目的, 其实只要加一个 & 引用符号就可以了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function closureFunc5(){ $num = 2; $func = function() use(&$num) { echo "\n"; $num++; echo $num; }; echo "\n"; echo $num; return $func; } $func = closureFunc5(); $func(); $func(); $func(); //输出: // 2 // 3 // 4 // 5 |
把匿名函数当作参数传递
1 2 3 4 5 6 7 8 9 | function callFunc($func){ $func("argv"); } callFunc(function($str){ echo $str; }) //输出: // argv |
ecshop远程商品详情图片本地化保存到本地的方法 PHP获取POST数据的几种方法以及应用