在php中存储和使用任意方法参数

时间:2012-04-25 13:09:06

标签: php

我将作业存储在一个进程选中并稍后执行的表中。 我现在(以及其他)存储工作的方式是:

  

$ className,$ method,$ params

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

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

问题是不同的方法需要不同格式的参数 - 有些期望有一定数量的标量,有些是数组,有些是混合的。

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

2 个答案:

答案 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 );");