我将作业存储在一个表中,该表由进程拾取并在以后执行。我现在存储作业的方式(除其他外)是:
$className、$method$params
其中参数是 JSON 编码的数组。现在我正在执行这样的作业:
$params = Zend_Json_Decoder::decode($params);
$cM = new $clname ();
$result = $cM->$method ( $params );
问题在于,不同的方法期望不同格式的参数 - 有些需要一定数量的标量,有些需要数组,有些需要混合。
我应该如何打包和解包参数,以便它们可以成为任何方法的参数?还是我应该以完全不同的方式执行此操作?感谢您的帮助。
保留现有的存储方法,并使用call_user_func_array()
调用例程:
$params = Zend_Json_Decoder::decode($params);
$cM = new $clname();
$result = call_user_func_array(array($cM, $method), $params);
唯一的缺点是,当所讨论的方法期望通过引用传递参数时,它确实开始变得复杂。
尝试代码评估。我认为这应该解决了你的问题。
$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 );");