2013-01-09 44 views
3

有什么办法编写语言版本的PHP真正倒闭超过5.3(5.3增加了use关键字为匿名函数)旧的?真正关闭<5.3

我PHP 5.3+我可以这样写:

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

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

回答

5

下会在这个简单的情况下工作:

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

但是,这不是严格意义上的封闭。

+0

在那里巧妙地使用'var_export'! :-D –

+0

好的,这个工作...但它击败了闭包的全部目的:干净和可读的代码(想象这样做几个10行功能...):( – NeuronQ

+3

您要求在PHP解决方案<5.3 ,没有其他比'create_function(匿名函数)'相当于 –

0

答案很简单:你问什么不能在PHP版本早于5.3来完成。对不起,但功能根本不可用。甚至没有任何有用的解决方法(当然除了使用全局变量)。

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

5.2被宣布生命结束前两年,并曾从那时起零个支持或安全修补程序 - 它是不支持的,没有安全感。

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

没有系统管理员值得他的工资将让他的网络可公开访问的系统上运行已知不安全的软件,因此,如果您还没有升级,你真的需要现在这样做。

如果您使用的是网络托管公司,并没有升级,你应该考虑你的业务移动到该关心他们的网络安全公司。

+0

这个问题从来没有说过需要在任何地方或任何东西托管它,这只是一个关于语言的问题。 – newacct