我是一名新手PHP程序员,目前正在学习闭包的概念。
关于使用 use() 的闭包,我知道可以这样做:
$y = "hello";
$c = function() use ($y) {
return $y;
};
print_r($c()); // prints out 'hello'
echo '<br />';
然而,我在编写一个返回另一个匿名函数的函数时遇到了问题,例如:
$u = function() {
return function () use ($y) {
return $y;
};
};
print_r($u()); // empty closure object...
echo '<br />';
我知道当我将上面的代码修改为下面的代码时,代码就可以完美地运行。但我不明白原因。
$b = function() use ($y) {
return function () use ($y) {
return $y;
};
};
print_r($b()); // output : [y] => hello
echo'<br />';
以类似的方式,我对下面使用全局变量的代码有一个问题,为什么它不起作用:
$k = function() {
return function() {
global $y;
return $y;
};
};
print_r($k()); // prints out 'Closure Object ( )'
echo '<br />';
请不要告诉我如何交换代码使其能够工作。因为我已经尝试过,并且知道如何更改和使这些代码工作。相反,我想知道为什么当我在另一个匿名函数的返回中调用global和use()时它们不起作用。