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
如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注