2013-01-09 42 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