php闭包use关键字
php闭包可以保存上下文的一些变量和值。默认情况下,匿名函数是不能调用所在代码块的上下文变量,但是,通过use
关键字就可以做到这一点。
function getMoney() {
$rmb = 1;
$dollar = 6;
$func = function() use ( $rmb ) {
echo $rmb;
echo $dollar;
};
$func();
}
getMoney();
//输出:
//1
//报错,找不到dorllar变量
由于$dollar
没有在use
中引用,所以就报错找不到$dollar
变量。
另外,使用闭包函数,不要忘记函数后面的分号,这是必不可少的。
当然,闭包作用域内的变量,只是复制了一下上下文中的变量而已,你并不能真正地改变上下文变量的值。所以,在闭包函数中改变变量的值,并不会影响到上下文变量。
function getMoney() {
$rmb = 1;
$dollar = 6;
$func = function() use($rmb) {
$rmb ++;
echo $rmb;
};
$func();
echo $rmb;
}
getMoney();
//输出:
//2
//1
可见,上下文的变量并没有被改变,但是,如何让上下文变量也发生变化呢?可以使用php的引用符号&
。
function getMoney() {
$rmb = 1;
$dollar = 6;
$func = function() use(&$rmb) {
$rmb ++;
echo $rmb;
};
$func();
echo $rmb;
}
getMoney();
//输出:
//2
//2
所以,将匿名函数返回给外界,匿名函数将会保存use
使用的变量,但是外界却不能获取这些变量,这样就达到的闭包的效果。
function getMoney() {
$rmb = 1;
$dollar = 6;
return function() use(&$rmb) {
$rmb ++;
echo $rmb;
};
}
$getMoneyFunc = getMoney();
$getMoneyFunc();
$getMoneyFunc();
//输出:
//2
//3
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=714