FORK版的PHP闭包(Closure)初探

修改自:http://my.oschina.net/u/867608/blog/126694#

感谢@豆浆油条 哥的原创教程,如果你想更利索地学习这篇教程,那么也可以看看我这篇fork版整理的内容,在没有遗漏的基础上,做了尽可能的精简。

匿名函数在PHP 5.3及以上才支持。

// @author: HuangFeng love 吴佳旻

// 将匿名函数赋值给变量使用
$func = function($param) {
    echo $param;
};
$func('aaa'); // 输出: aaa

// 把上面的匿名函数放在函数里面
function printStr() {
    $func = function($param) {
        echo $param;
    };
    $func('aaa');
}

printStr();// 输出: aaa

// 这次不是直接执行里面的函数,而是将其作为函数返回值返回
function getPrintStrFunc() {
    $func = function($param) {
        echo $param;
    };
    return $func;
}

$printStrFunc = getPrintStrFunc();
$printStrFunc('aaa'); // 输出: aaa

// 把匿名函数当做参数传递,并且调用它
function callFunc($func) {
    $func('aaa');
}

$printStrFunc = function($param) {
    echo $param;
};
callFunc($printStrFunc);

// 也可以直接将匿名函数进行传递
callFunc(function($param) {
    echo $param;
} );

//利用 use 关键字来使用上下文的变量
function myFunc1() {
    $a = 1;
    $b = 2;
    $func = function() use ($a) {
        echo $a;
        echo $b;
    };
    $func();
}
myFunc1(); // 输出 1 并报错,因为$b没有用use,所以获取不到

// use只是做一个复制,如要使用原始的那个变量,需要用&
function myFunc2() {
    $a = 1;
    $func = function() use (&$a) {
        echo $a;
        $a++;
    };
    return $func;
}
$myFunc = myFunc2();
$myFunc();// 1
$myFunc();// 2
$myFunc();// 3


你可能感兴趣的:(PHP,匿名函数,closure)