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