1

私は自分用に小さな MVC フレームワークを作成しようとしており、次のような URL 構造を使用していますhttp://www.example.com/className/methodName/var1/var2/var3。任意の数の変数に対応できるようにしたいと考えています。

一部を除いて、必要な情報はすべて揃っています/var1/var2/var3。現在、「/」で爆発した配列にあるので、次のようになります。var[0] = "var1",var[1] = "var2",var[2] = "var3"

呼び出されるメソッドは不明であり、各メソッドは異なる量のパラメーターを必要とする可能性があるため、パラメーターを次のように渡すことができる方法を見つけたいと思います。

$controller->$function($var1, $var2, $var3);

それよりも

$controller->$function($var);

などのカンマ区切りの変数をつなぎ合わせて、$var1, $var2, $var3eval() を使用してやりたいことを実行できることに気付きましたが、もっと良い方法があるかどうか疑問に思っています。ユーザーが送信したデータを使用するため、これには eval() を使用したくありません。

最悪の場合、評価の前にデータをクレンジングしようとするだけだと思いますが、それでも避けたいと思います。

私が持っていたもう 1 つの潜在的なアイデアは、foreach() を使用して、メソッド呼び出し内の各要素をループすることでした。しかし、それでも私には少し面倒に思えます。

ちなみに、可変量のパラメーターを渡して配列にグループ化し、単一のパラメーターを渡す標準的な方法はありますか?

これを行うためのよりエレガントな方法を誰かが知っていれば、本当に感謝しています。

4

2 に答える 2

1

@Dogbertの答えは、私が提案しようとしていることを補完します。

パラメータを受け入れない関数を作成することができ、任意の数のパラメータを自由に渡すことができます (またはパラメータをまったく渡さない)。次のような PHP 関数を使用するだけで済みfunc_get_args()ます。 func_num_args()func_get_arg(int arg_index)

以下に例を示します。

function syncOrderRelation(){
    $num_arguments = func_num_args();
    $arguments = func_get_args();
    #gets all the arguments in the request
    list($userID,$spID,$productID) = $arguments;
    #if you know what you're expecting or
    for($i = 0; $i < $num_arguments; $i++){
            $argument_at_index = func_get_arg($i);
    }
}    

この関数は、次の方法で呼び出すことができます。

syncOrderRelation();
syncOrderRelation($var1,$var2,var3);
syncOrderRelation($var1);
#or you could call it as @Dogbert suggested since the function will accept whatever
#arguments you supply    

残りはあなた次第です...ハッピーコーディング!

于 2013-03-21T16:51:28.673 に答える