我将作业存储在一个进程选中并稍后执行的表中。 我现在(以及其他)存储工作的方式是:
$ className,$ method,$ params
其中params是JSON编码的数组。现在我正在执行这样的工作:
$params = Zend_Json_Decoder::decode($params);
$cM = new $clname ();
$result = $cM->$method ( $params );
问题是不同的方法需要不同格式的参数 - 有些期望有一定数量的标量,有些是数组,有些是混合的。
我应该如何打包和解包参数,以便它们可以成为任何方法的参数? 或者我应该以完全不同的方式做到这一点? 谢谢你的帮助。
答案 0 :(得分:1)
保留现有的存储方式,并使用call_user_func_array()
调用例程:
$params = Zend_Json_Decoder::decode($params);
$cM = new $clname();
$result = call_user_func_array(array($cM, $method), $params);
唯一不利的是,当有问题的方法希望通过引用传递参数时,它确实开始变得复杂。
答案 1 :(得分:0)
尝试代码评估。我认为这可以解决你的问题。
$params = Zend_Json_Decoder::decode($params);
$params_str = "";
$params_first = true;
foreach (array_keys($params) as $param) {
$params_str .= (($params_first) ? "" : ",") . " \$params[$param]";
$params_first = false;
}
$cM = new $clname ();
eval("\$result = \$cM->$method ( $params_str );");