php闭包实例5.3

时间:2012-06-26 22:42:46

标签: php oop closures php-5.3

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

$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中的任何一个很棒的东西:(

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

2 个答案:

答案 0 :(得分:1)

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

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

将闭包分配给这些值。但是:

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

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

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

  function parse($string,$closure){
      $array = array();
      foreach(explode(',',$string) as $key) $array[$key] = $closure;
      return $array;
  }

答案 1 :(得分: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)