【发布时间】:2010-12-31 15:41:43
【问题描述】:
我一直在阅读 PHP 5.3 的新特性,其中一个主要特性是 闭包。
除非我弄错了,否则 PHP 开发人员是:
a) 将闭包与匿名函数混淆
b) 我正在测试的 PHP 5.3.1 中的闭包被破坏了
从what wikipedia says 开始,闭包是匿名函数的机制,加上函数的父作用域变量与函数作用域的绑定。最后一部分似乎在 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
和
alert((function() {
var x = 2;
return function() {
return x;
};
})()()); // alerts 2
那么,我错了吗?
【问题讨论】:
-
我没有要测试的新 php :(