php闭包use关键字

该文章由 leevare 发布于 ,归类于 PHP

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

如果觉得我的文章对您有用,请您随意打赏。您的支持将鼓励我更加努力创作!

相关文章:

说点什么

avatar
300
  Subscribe  
提醒