【发布时间】:2015-12-07 12:04:53
【问题描述】:
我是 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() 在我调用它们以返回另一个匿名函数时不起作用。
【问题讨论】:
标签: php closures anonymous-function