/** * Invokes a task handler method using the request arguments. * * @param \WordPress\Cli\TaskHandlerInterface $handler * @param string $method * * @throws \WordPress\Cli\Exception if method cannot be called * * @return mixed */ protected function invokeHandler(TaskHandlerInterface $handler, $method) { $params = array(); $reflection = new ReflectionMethod($handler, $method); foreach ($reflection->getParameters() as $i => $param) { $name = $param->getName(); if ($this->request->hasArg($name)) { $params[$name] = $this->request->getArg($name); } else { if ($this->request->hasArg($i)) { $params[$name] = $this->request->getArg($i); } else { if ($param->isDefaultValueAvailable()) { $params[$name] = $param->getDefaultValue(); } else { throw new Exception("Missing parameter '{$name}'."); } } } } return $reflection->invokeArgs($handler, $params); }