PHP 闭包实例 5.3.


php closure instances 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 中的任何很棒的东西:(

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

  $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;
  }

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

无论如何,如果您需要运行存储在$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)