我正在创建一个MVC框架,它将“action”参数后面的任何url参数传递给请求的动作,通过动作的方法参数。有没有一种方法可以找出定义的方法在该方法外有多少参数? (PHP)
所以如果网址是:
host/controller_name/action_name/param1/param2
发生下述情况(简化当然):
$requested_controller = new controller_name();
call_user_func_array(array($requested_controller, action_name), array(param1, param2);
的问题是在错误报告。如果请求的URL数量错误(动作需要两个参数,但url只包含一个参数,我会收到警告消息,然后破坏)。
由于这是一个程序错误,而不是一个例外,我不能试图/以任何方式捕捉它,我可以吗?有没有办法在尝试运行之前检查操作方法的预期参数数量?或者我应该用完全不同的方式来攻击它?
EDIT(液)
$action_method_relfection = new ReflectionMethod($requested_controller, $requested_action);
if (count($path_variables) < $action_method_relfection->getNumberOfRequiredParameters() || count($path_variables) > $action_method_relfection->getNumberOfParameters()) {
// if not, redirect to 404 error
self::redirect_to_404();
}
可能重复的[如何动态检查一个函数的参数数量在PHP](http://stackoverflow.com/questions/346777/how-to-dynamically-check-number-of-arguments-of-a -function-in-php) – GWW 2011-03-28 18:40:28
只有最终的解决方案存在问题,如果开发者没有在url中包含正确的参数数量,他们将不会收到警告。会找到一个方法。 – dqhendricks 2011-03-28 19:16:12