PHP function returning anonymous function with use / global
我对PHP不熟悉,目前正在学习闭包的概念。
对于使用use()的闭包,我知道可以执行以下操作:
1 2 3 4 5 6 7 | $y ="hello"; $c = function() use ($y) { return $y; }; print_r($c()); // prints out 'hello' echo '<br />'; |
但是,我在执行返回另一个匿名函数的函数时遇到问题,例如:
1 2 3 4 5 6 7 8 | $u = function() { return function () use ($y) { return $y; }; }; print_r($u()); // empty closure object... echo '<br />'; |
号
我知道当我把上面的代码修改为下面的代码时,代码就可以完美地工作。但我不明白为什么。希望有人能给我解释一下。谢谢。
1 2 3 4 5 6 7 8 | $b = function() use ($y) { return function () use ($y) { return $y; }; }; print_r($b()); // output : [y] => hello echo'<br />'; |
以类似的方式,我对下面使用global的代码有一个问题,为什么它不起作用:
1 2 3 4 5 6 7 8 9 | $k = function() { return function() { global $y; return $y; }; }; print_r($k()); // prints out 'Closure Object ( )' echo '<br />'; |
。
请不要告诉我如何交换代码使之工作。正如我所尝试的,我知道如何改变和使这些代码工作。相反,我想知道当我在返回另一个匿名函数时,为什么global和use()不起作用。
感谢您帮助我澄清有关如何使用/全局工作的想法。
I know that when I modify the above codes to the below one, then the code works perfectly. BUT I do NOT understand the reason why. Hope someone can explain it to me.
号
它不能像您期望的那样工作的原因是因为您的关闭正在返回另一个关闭。
不能调用de-reference闭包,但请考虑将其作为如何工作的示例:
1 2 3 4 5 6 7 8 9 10 11 |
以下内容不起作用:
1 |
号
在不存在
注意,如果您在上面做了错误报告,那么您也会得到一个未定义的变量错误。
您似乎已经意识到了,但我还是要提到,在闭包内无法访问