【问题标题】:Way to inject variables into existing closure scope?将变量注入现有闭包范围的方法?
【发布时间】:2011-07-14 04:45:09
【问题描述】:

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

$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(),但我想在定义闭包后“注入”变量,我不想全局。

【问题讨论】:

  • 这个问题让我想哭。请说这是为了破解现有的封闭库,而不是尝试实际编写新代码。
  • @pst:他肯定在写新代码。或者代码的原始作者严重脑残,因为他在闭包中使用了变量,而这些变量没有传递给它;)
  • 是的,这是尝试实际编写新代码 :-) 我在玩,想检查使用闭包的方法。

标签: php reflection closures


【解决方案1】:

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

【讨论】:

  • 第一:感谢失踪; :-) 。正如我所说,关闭已经定义。我不能使用 use() afaik。
  • @user601187,对不起,那是不可能的。闭包中的 $y 是一个本地(未初始化)变量。如果 PHP 是严格类型的,那将是一个编译时错误。
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 2012-05-18
  • 2017-06-28
  • 2012-01-27
  • 2015-12-26
  • 2021-04-16
相关资源
最近更新 更多