Chris@0: valid = false; Chris@0: return; Chris@0: } Chris@0: Chris@12: $this->scheme = isset($parsed['scheme']) ? $parsed['scheme'] : null; Chris@12: $this->host = isset($parsed['host']) ? $parsed['host'] : null; Chris@12: $this->port = isset($parsed['port']) ? $parsed['port'] : null; Chris@12: $this->user = isset($parsed['user']) ? $parsed['user'] : null; Chris@12: $this->pass = isset($parsed['pass']) ? $parsed['pass'] : null; Chris@12: $this->path = isset($parsed['path']) ? $parsed['path'] : null; Chris@12: $this->query = isset($parsed['query']) ? $parsed['query'] : null; Chris@0: $this->fragment = isset($parsed['fragment']) ? $parsed['fragment'] : null; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Create an instance Chris@0: * Chris@0: * Useful for chained validations Chris@0: * Chris@0: * @param string $uri Chris@0: * @return self Chris@0: */ Chris@0: public static function factory($uri) Chris@0: { Chris@0: return new static($uri); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Retrieve the host Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public function getHost() Chris@0: { Chris@0: return $this->host; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Retrieve the URI path Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public function getPath() Chris@0: { Chris@0: return $this->path; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Retrieve the scheme Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public function getScheme() Chris@0: { Chris@0: return $this->scheme; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Is the URI valid? Chris@0: * Chris@0: * @return bool Chris@0: */ Chris@0: public function isValid() Chris@0: { Chris@0: if (false === $this->valid) { Chris@0: return false; Chris@0: } Chris@0: Chris@12: if ($this->scheme && ! in_array($this->scheme, $this->validSchemes)) { Chris@0: return false; Chris@0: } Chris@0: Chris@0: if ($this->host) { Chris@17: if ($this->path && 0 !== strpos($this->path, '/')) { Chris@0: return false; Chris@0: } Chris@0: return true; Chris@0: } Chris@0: Chris@0: // no host, but user and/or port... what? Chris@0: if ($this->user || $this->port) { Chris@0: return false; Chris@0: } Chris@0: Chris@0: if ($this->path) { Chris@0: // Check path-only (no host) URI Chris@17: if (0 === strpos($this->path, '//')) { Chris@0: return false; Chris@0: } Chris@0: return true; Chris@0: } Chris@0: Chris@0: if (! ($this->query || $this->fragment)) { Chris@0: // No host, path, query or fragment - this is not a valid URI Chris@0: return false; Chris@0: } Chris@0: Chris@0: return true; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Is the URI absolute? Chris@0: * Chris@0: * @return bool Chris@0: */ Chris@0: public function isAbsolute() Chris@0: { Chris@0: return ($this->scheme !== null); Chris@0: } Chris@0: }