2012-04-25 29 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);"); 
相關問題