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

posted @ 2020-10-09 17:59  落日长烟  阅读(1282)  评论(0编辑  收藏  举报