PHP中也可以使用闭包,但版本应该是5.3.0及以上。
闭包中可以从父作用域继承变量,在闭包内使用,但要通过use声明。
$tmp = 'hello';
$func = function() use ($tmp) {
echo $tmp . '<br/>';
};
$func();
$tmp = 'world';
$func();
输出结果为:
hello
hello
改变$tmp值,并未改变结果。这是因为闭包函数在编译时就已经确定了从父作用域继承变量的值了,而不是在调用时确定。
如果想闭包函数继承的变量能够随着父作用域中变量变化而跟着变化,可以使用引用,如下代码所示。
$tmp = 'hello';
$func = function() use (&$tmp) {
echo $tmp . '<br/>';
};
$func();
$tmp = 'world';
$func();
这时输出结果为:
hello
world