2012-04-25 3 views
1

私は、プロセスが後で取り上げて実行するテーブルにジョブを保存しています。 私は(特に)今の仕事を保存する方法は以下のとおりです。phpで任意のメソッド引数を保存して使用する

$ classNameのは、$メソッドは、$はparamsは

は、JSONエンコードされた配列であるparamsは。今、私はこのようなジョブを実行しています:

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

を問題は、異なる方法が異なるフォーマットでパラメータを期待していることである - いくつかは、スカラーのセット数、いくつかの配列、いくつかの混合を期待しています。

どのようにパラメータをパッケージ化して展開して、どのようなメソッドの引数にすることができますか? これを完全に異なる方法で行う必要がありますか? 助けてくれてありがとう。

+0

[あなたの投稿に署名やタグラインを追加しない](http://stackoverflow.com/faq#signatures)。 – meagar

+0

'serialize()'と 'unserialize()'? PHPとJavaScriptの間でデータを渡さない場合は、JSONをエンコードするよりも少し効率的です。また、参照してください:func_get_args - http://uk.php.net/func_get_args – CD001

答えて

1

既存の保管方法を維持し、call_user_func_array()を使用してルーチンを呼び出します。

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

唯一の欠点は、それが問題のメソッドは、引数は参照によって渡されることを期待していたときに、複雑な取得を開始しないことです。

0

コード評価を試してください。私はこのshoukdがあなたの問題を解決すると思う。

$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);"); 
関連する問題