router->match($path); if($params === false) { exit("No routes matched"); } $controller = "App\Controllers\\" . ucwords($params["controller"]); $action = $params["action"]; $controller_object = new $controller; $args = $this->getActionArguments($controller, $action, $params); $controller_object->$action(...$args); } private function getActionArguments(string $controller, string $action, array $params = []): array { $args = []; $method = new ReflectionMethod($controller, $action); foreach($method->getParameters() as $parameter) { $name = $parameter->getName(); $args[$name] = $params[$name]; } return($args); } }