将变量注入现有闭包范围的方法?

时间:2011-03-12 20:09:24

标签: php reflection closures

有没有办法将变量“注入”到闭包的范围内?我想做的是这样的事情:

$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是一种方式,但有一种更简单的方法,因为我只想扩展闭包的参数列表,而不是代码。我知道use(),但我想在定义闭包后“注入”变量,我不想全局。

1 个答案:

答案 0 :(得分:19)

也许你想要的是闭包的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?');