1

这对我来说有点难以解释,但我会尽力而为。我正在尝试找到创建闭包实例的最佳方法。下面是我如何创建和访问闭包的示例:

$myvar->parse('var1, var2', function () {
  //my code
});

然后我通过分解逗号来循环遍历字符串并将其放入这样的数组中。

$array = array();
$array['var1'] = closure();
$array['var2'] = closure();

稍后在我的代码中,我call_user_func用来执行该功能。

现在,我遇到的问题是,当我访问$array['var1']它时,它会毫无问题地调用闭包。

但是当我访问$array['var2']它时,它什么也不做。一段时间以来,我一直在寻找各种网站,但运气不佳。我是否需要使用指针(尝试但没有成功)或以某种方式创建它的新实例?

我目前只能在我的服务器上访问 php 5.3,所以我不能使用 5.4 中的任何很棒的东西 :(

我非常感谢您提供的任何反馈和建议。

4

2 回答 2

1
  $yourcall = function () {
    //code
  };

  $array['var1'] = $yourcall;
  $array['var2'] = $yourcall;

将闭包分配给这些值。然而:

  $array['var1'] = $yourcall();
  $array['var2'] = $yourcall();

正如您似乎已经将调用该闭包的结果分配给数组项。

在你的 parse 函数中(为什么它需要一个字符串而不是一个数组),我假设你想要这个:

  function parse($string,$closure){
      $array = array();
      foreach(explode(',',$string) as $key) $array[$key] = $closure;
      return $array;
  }
于 2012-06-26T22:50:16.987 回答
0

是的,你的问题不清楚。你知道,所以我想知道你为什么没有更好地解释。

无论如何,如果您需要运行存储在其中的闭包$array['var2'],则必须专门在代码中放入如下内容:

$array['var2'] = function(){
//> Code
};

这是唯一的方法

通过猜测您的代码,您的函数解析应该如下所示:

function parse($keys,$func) {
 $array = array();
 foreach(explode(',',$keys) as $v) {
   $array[trim($v)] = $func;  //> trim important here!
 }
}

你很可能忘记了trim($v)

于 2012-06-26T22:46:07.260 回答