PHP中的实际闭包<5.3

时间:2013-01-09 15:30:02

标签: php functional-programming closures

有没有办法在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

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

2 个答案:

答案 0 :(得分:5)

以下内容适用于这种简单的情况:

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

但从严格意义上讲,这不是一个封闭。

答案 1 :(得分:0)

简单回答:在5.3以上的PHP版本中无法完成您的要求。对不起,但功能根本不可用。甚至没有任何有用的解决方法(当然除了使用全局变量)。

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

5.2两年前被宣布为生命终止,并且从那以后一直没有支持或安全修复 - 它没有支持和不安全。

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

没有值得支付费用的系统管理员可以让他的网络在公共可访问的系统上运行已知不安全的软件,所以如果你还没有升级,你现在真的需要这样做。

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