3

有没有办法在 PHP 中为早于 5.3 的语言版本编写真正的闭包(因为 5.3 添加了use匿名函数的关键字)?

我 PHP 5.3+ 我可以写:

function make_adder($x) {
    return function($to) use ($x) {
        return $to + $x;
    };
}
$add5 = make_adder(5);
$add5(100); # => 105

如何使用这种在函数内部定义函数的模式并且内部函数可以访问外部函数变量?

4

2 回答 2

5

在这种简单的情况下,以下内容将起作用:

function make_adder($x) {
    return create_function('$to', 'return '.var_export($x, true).' + $to;');
}
$add5 = make_adder(5);
$add5(100); # => 105

但这并不是严格意义上的关闭。

于 2013-01-09T15:33:50.050 回答
0

简单的答案:您所要求的无法在 5.3 之前的 PHP 版本中完成。抱歉,该功能根本不可用。甚至没有任何有用的解决方法(当然除了使用全局变量之外)。

但是,如果您使用的 PHP 版本早于 5.3,我强烈建议您升级。

5.2 于两年前被宣布终止,从那时起支持或安全修复为零——它不受支持且不安全。

此外,缺乏支持也延伸到操作系统。对于大多数服务器操作系统,当前操作系统版本不存在 5.2 及更早版本的安装程序。这意味着如果您正在运行 PHP 5.2,那么您很可能也在运行过时的操作系统版本。这也有安全隐患。

任何值得他付出的系统管理员都不会允许他的网络在可公开访问的系统上运行已知不安全的软件,因此,如果您还没有升级,那么您现在真的需要这样做。

如果您使用尚未升级的网络托管公司,您应该考虑将您的业务转移到关心其网络安全的公司。

于 2013-01-09T15:52:32.720 回答