我一直在阅读 PHP 5.3 的新功能,主要功能之一是closures.
除非我犯了严重错误,否则 PHP 开发人员要么是:
a) 将闭包与匿名函数混淆
b) 我正在测试的 PHP 5.3.1 中的闭包被破坏了
From 维基百科怎么说 http://en.wikipedia.org/wiki/Closure_(computer_science)闭包是匿名函数加上函数父级作用域变量与函数作用域的绑定的机制。最后一部分在 PHP 中似乎被破坏了。
我检查过 PHP 错误,但奇怪的是,没有发现任何相关内容。
这是我测试的方法:
<?php
function getFun() {
$x = 2;
return function() {
return $x;
};
}
$f = getFun(); // getFun()(); doesn't work -.-
var_dump($f()); // $f() == null
在实际实现闭包的语言中,它返回 2:
def f():
x = 2
return lambda: x
print(f()()) # prints 2
and
alert((function() {
var x = 2;
return function() {
return x;
};
})()()); // alerts 2
那么,是我错了还是?
从外部作用域继承的变量需要显式列出。从手册:
public function getTotal($tax)
{
$total = 0.00;
$callback =
function ($quantity, $product) use ($tax, &$total)
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)