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

コード評価を試してください。私はこの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 );");
于 2012-04-25T13:16:15.037 に答える