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
多学、
多记、
多练、