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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM