name; } public function getPath(): string { return $this->path; } public function hasQuery(): bool { return !empty($this->query); } public function getQuery(): array { return $this->query; } public function hasFragment(): bool { return $this->fragment !== ''; } public function getFragment(): string { return $this->fragment; } public static function handleAttributes(URLRegistry $urls, object $source): void { $objectInfo = new ReflectionObject($source); $methodInfos = $objectInfo->getMethods(); foreach($methodInfos as $methodInfo) { $attrInfos = $methodInfo->getAttributes(URLInfo::class); foreach($attrInfos as $attrInfo) $urls->registerInfo($attrInfo->newInstance()); } } }