2012-04-25 18 views
1

我将作业存储在表中,进程将在稍后执行并执行。 我储存作业现在(等等)的方式是:在php中存储和使用任意方法参数

的$ className,$方法,$ PARAMS

其中params为一个JSON编码数组。现在我在执行类似的职位:

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

的问题是,不同的方法希望以不同的格式参数 - 一些人预计的标量的一组数字,一些阵列,一些混合。

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

+0

请[不要将签名或标语添加到您的帖子](http://stackoverflow.com/faq#signatures)。 – meagar 2012-04-25 13:13:25

+0

'serialize()'和'unserialize()'?如果你不在PHP和JavaScript之间传递数据,它比JSON编码效率稍高。另请参阅:func_get_args - http://uk.php.net/func_get_args – CD001 2012-04-25 13:17:15

回答

1

使用call_user_func_array()保持你现有的存储方法,并调用子程序:

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

唯一的缺点是,它并开始变得复杂,当有问题的方法需要的参数按引用传递。

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);"); 
相关问题