2011-03-12 25 views
2

有沒有辦法將一個變量注入到閉包的範圍中?我想要做的是這樣的事情:將變量注入現有閉包範圍的方法?

$c = function($x){echo $x.$y;}; 
$y = 'RLY?'; 
$c = inject_var($c,$y); 
$c('O '); 

另一種方式可能是這樣的:

$c = function($x){echo $x.$y;}; 
$c = extend_paramlist($c,'y'); 
$c('O ','RLY?'); 

我認爲Inject code in a PHP closure是一種方法,但有我只是想一個簡單的方法擴展閉包的參數列表,而不是代碼。我知道使用(),但我想在注入閉包之後「注入」變量,我不想全局。

+4

這個問題讓我想哭泣。請說這是爲了破解現有的封閉庫,而不是嘗試實際編寫新代碼。 – 2011-03-12 20:12:45

+0

@pst:他肯定是在寫新代碼。或者原代碼的作者是嚴重的braindamaged,因爲他在封閉中使用變量,而不是傳遞給它;) – NikiC 2011-03-12 20:27:21

+1

是的,這是一個嘗試實際編寫新的代碼:-)我玩耍,想要檢查使用閉包的方法。 – nonsenz 2011-03-12 20:28:23

回答

18

也許你想什麼是use第一個封閉的:

$y = 'RLY?'; 
$c = function($x) use($y) { echo $x.$y; }; 
$c('O '); 

或者,如果你真的想擴展參數列表,做正確:

$c = function($x,$y){ 
     $f = function($x) use($y) {echo $x.$y; }; 
     $f($x); 
    }; 
$c('O ','RLY?'); 
+0

第一:thx爲失蹤; :-)。正如我所說,封閉已經確定。我不能使用use()afaik。 – nonsenz 2011-03-12 20:22:59

+1

@ user601187,對不起,那是不可能的。閉包中的$ y是一個本地(和未初始化的)變量。如果PHP是嚴格鍵入的,那將是一個編譯時錯誤。 – linepogl 2011-03-12 20:28:17