1

わかりました、私は自分のカスタム mvc システムを作成する方法を学んでいます。これまでのところ、ルーターやコントローラーなどを作成しました。

例 私はコントローラ プロファイル クラスと URL www.helloworld.com/args1/args2/args3 を持っています

class Profiles
{
    function index($args1,$args2)
    {
        echo var_dump($args1,$args2);
    }
}

heres は、メソッドと parms を実行するルーター クラスの一部です。

        if (is_callable(array($controller,$method))) {
            call_user_func_array(array($controller, $method), $this->params);
        }

$this->paramsこれまでのところエラーはありませんが、どういうわけか私は404 を与える必要がありcount(params)ます。call_user_func_array(array($controller, $method), $this->params);

私が考えているのは、count get params が呼び出されたクラスの count params と同じではない場合、404、$this->params を数えることができるとしましょう。それは私に 3 を与えました。call_user_func_array によって呼び出されたクラスのパラメーターをどのようにカウントできますか?

ご覧いただきありがとうございます

アダム・ラマダン

4

3 に答える 3

1

リフレクションを使用できます:

$refclass = new ReflectionClass($controller);
$param_count = $refclass->getMethod($method)->getNumberOfRequiredParameters();
if ($param_count <= count($this->params)) {
    $refclass->invokeArgs($controller, $this->params);
} else {
    // 404
}

パラメータが多すぎるかどうかをチェックすることで、より厳密にすることができます。

于 2011-01-21T09:36:34.663 に答える
1

私の知る限り、リフレクションを使用せずにメソッドのパラメーター数を取得する方法はありません。ただし、それは非常に単純で、次のようになります。

$reflector = new ReflectionClass('Profiles');
$method = $reflector->getMethod('index');
$parameters = $method->getParameters();

printf('%s expects %d parameters', $method->name, count($parameters));

譲ります

index expects 2 parameter

リフレクションには常にコストがかかることに注意してください。ただし、これによるパフォーマンスへの影響は顕著ではありません。

于 2011-01-21T09:35:43.830 に答える
0

call_user_func_arrayによって呼び出されたクラスのパラメータをカウントします

実際には、かなり単純です。func_get_argsを使用してパラメーターを配列にフェッチし、それらをカウントすることで、パラメーターの量を判別できます。例:

<?php
function foo( ) {
   echo "I have received " . count( func_get_args( ) ) . " parameters.";
}
foo( ); // I have received 0 parameters.
foo( 1, 2, 3, 4, 5 ); // I have received 5 parameters.
于 2011-01-21T09:36:39.260 に答える