我正在創建一個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