/** * @param UriInterface $uri * @param UriInterface $baseUri * * @return UriInterface */ public function resolve(UriInterface $uri, UriInterface $baseUri) { $baseUriReflector = new ReflectionObject($baseUri); if (!$baseUriReflector->hasMethod('resolve')) { $baseUri = new Uri($baseUri->toString()); if ($uri instanceof Uri) { $uri = clone $uri; } else { $uri = new Uri($uri->toString()); } } elseif (!$uri instanceof $baseUri) { $uri = $baseUriReflector->newInstance($uri->toString()); } else { $uri = clone $uri; } return $uri->resolve($baseUri); }
/** * @param string $uri * @param string|null $defaultScheme * * @return UriInterface */ public function create($uri, $defaultScheme = null) { if (!is_string($uri)) { throw new InvalidArgumentException('URI must be a string.'); } $scheme = Uri::parseScheme($uri); if (null === $scheme) { $scheme = $defaultScheme; } $schemeClass = $this->schemeClass($scheme); return new $schemeClass($uri); }