refineParam(); $this->refineReturn(); } /** * Parse the param tag into its components * * @return void */ protected function refineParam() { $result = []; // prefill from reflection foreach ($this->reflector->getParameters() as $parameter) { $refType = $parameter->getType(); $result[$parameter->getName()] = [ 'type' => new Type($refType ? $refType->getName() : 'string', $this->getContext()), 'optional' => $parameter->isOptional(), 'description' => '', ]; if($parameter->isDefaultValueAvailable()) { $result[$parameter->getName()]['default'] = $parameter->getDefaultValue(); } } // refine from doc tags foreach ($this->tags['param'] ?? [] as $param) { [$type, $name, $description] = array_map('trim', sexplode(' ', $param, 3, '')); if ($name === '' || $name[0] !== '$') continue; $name = substr($name, 1); if (!isset($result[$name])) continue; // reflection says this param does not exist $result[$name]['type'] = new Type($type, $this->getContext()); $result[$name]['description'] = $description; } $this->tags['param'] = $result; } /** * Parse the return tag into its components * * @return void */ protected function refineReturn() { // prefill from reflection $refType = $this->reflector->getReturnType(); $result = [ 'type' => new Type($refType ? $refType->getName() : 'void', $this->getContext()), 'description' => '', ]; // refine from doc tag foreach ($this->tags['return'] ?? [] as $return) { [$type, $description] = array_map('trim', sexplode(' ', $return, 2, '')); $result['type'] = new Type($type); $result['description'] = $description; } $this->tags['return'] = $result; } }