一开始看到function (参数) use (arg[])的用法还是感觉很陌生的,后来看了一下,就是php的闭包,也就是匿名函数的用法。详细的demo可以看下方链接。
我的理解是: 就是和java一样的匿名函数,只是有了一个use关键字,这个关键字传递进去的参数,一旦在函数内进行了修改,函数外再调用就会发生同样的变化。类似于c的地址传递。因为php的变量作用域,在类中定义的变量,是不能在函数内部直接使用的。所以要use传递进去,达到类似java的类变量的那种用法的效果。
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。也因此,为了扩展作用域,所以有了use()关键字来实现。
例如:
使用use的时候
<?php
function test() {
$b = 'hello';
return function ($a) use ($b) {
echo $b ." ". $a;
};
}
$b = test();
$b('world');//结果是hello world
?>
不使用use的时候:
<?php
function test() {
$b = 'hello';
return function ($a) {
echo $b ." ". $a;
};
}
$b = test();
$b('world');
?>
//报错
报错如下所示:
就是说,b没有定义,也就是说在函数内部无法感应到test里的$b,这点和java之类的语言就很不一样了。所以要想到达一样的效果,就用了use即可。而且还是地址传递,值更新共享。
链接如下:
https://www.php.cn/php-weizijiaocheng-396552.html