1

我将作业存储在一个进程拾取并稍后执行的表中。我现在(除其他外)存储作业的方式是:

$className, $method, $params

其中 params 是 JSON 编码的数组。现在我正在执行这样的工作:

$params = Zend_Json_Decoder::decode($params);    
$cM = new $clname ();
$result = $cM->$method ( $params );

问题是不同的方法需要不同格式的参数——一些需要一组标量,一些是数组,一些是混合的。

我应该如何打包和解包参数,以便它们可以作为任何方法的参数?或者我应该以完全不同的方式做到这一点?谢谢您的帮助。

4

2 回答 2

1

保留您现有的存储方法,并使用以下方法调用例程call_user_func_array()

$params = Zend_Json_Decoder::decode($params);    
$cM = new $clname();
$result = call_user_func_array(array($cM, $method), $params);

唯一的缺点是,当所讨论的方法期望通过引用传递参数时,它确实开始变得复杂。

于 2012-04-25T13:17:17.217 回答
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 );");
于 2012-04-25T13:16:15.037 回答