* [user-info@]host[:port] * * * If the port component is not set or is the standard port for the current * scheme, it SHOULD NOT be included. * * This method MUST return an empty string if no authority information is * present. * * @return string Authority portion of the URI, in "[user-info@]host[:port]" * format. */ public function getAuthority(); /** * Retrieve the user information portion of the URI, if present. * * If a user is present in the URI, this will return that value; * additionally, if the password is also present, it will be appended to the * user value, with a colon (":") separating the values. * * Implementations MUST NOT return the "@" suffix when returning this value. * * @return string User information portion of the URI, if present, in * "username[:password]" format. */ public function getUserInfo(); /** * Retrieve the host component of the URI. * * This method MUST return a string; if no host component is present, an * empty string MUST be returned. * * @return string Host component of the URI. */ public function getHost(); /** * Retrieve the port component of the URI. * * If a port is present, and it is non-standard for the current scheme, * this method MUST return it as an integer. If the port is the standard port * used with the current scheme, this method SHOULD return null. * * If no port is present, and no scheme is present, this method MUST return * a null value. * * If no port is present, but a scheme is present, this method MAY return * the standard port for that scheme, but SHOULD return null. * * @return null|int The port for the URI. */ public function getPort(); /** * Retrieve the path component of the URI. * * This method MUST return a string. * * Normally, the empty path "" and absolute path "/" are considered equal as * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically * do this normalization because in contexts with a trimmed base path, e.g. * the front controller, this difference becomes significant. It's the task * of the user to handle both "" and "/". * * The value returned MUST be percent-encoded, but MUST NOT double-encode * any characters. To determine what characters to encode, please refer to * RFC 3986, Sections 2 and 3.3. * * As an example, if the value should include a slash ("/") not intended as * delimiter between path segments, that value MUST be encoded (e.g., "%2F") * when passed to the instance. * * @see https://tools.ietf.org/html/rfc3986#section-2 * @see https://tools.ietf.org/html/rfc3986#section-3.3 * @return string The path component of the URI. */ public function getPath(); /** * Retrieve the query string of the URI. * * This method MUST return a string; if no query string is present, it MUST * return an empty string. * * The string returned MUST omit the leading "?" character. * * The value returned MUST be percent-encoded, but MUST NOT double-encode * any characters. To determine what characters to encode, please refer to * RFC 3986, Sections 2 and 3.4. * * As an example, if a value in a key/value pair of the query string should * include an ampersand ("&") not intended as a delimiter between values, * that value MUST be encoded (e.g., "%26") when passed to the instance. * * @see https://tools.ietf.org/html/rfc3986#section-2 * @see https://tools.ietf.org/html/rfc3986#section-3.4 * @return string The URI query string. */ public function getQuery(); /** * Retrieve the fragment component of the URI. * * This method MUST return a string; if no fragment is present, it MUST * return an empty string. * * The string returned MUST omit the leading "#" character. * * The value returned MUST be percent-encoded, but MUST NOT double-encode * any characters. To determine what characters to encode, please refer to * RFC 3986, Sections 2 and 3.5. * * @see https://tools.ietf.org/html/rfc3986#section-2 * @see https://tools.ietf.org/html/rfc3986#section-3.5 * @return string The URI fragment. */ public function getFragment(); /** * Return an instance with the specified scheme. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified scheme. If the scheme * provided includes the "://" delimiter, it MUST be removed. * * Implementations SHOULD restrict values to "http", "https", or an empty * string but MAY accommodate other schemes if required. * * An empty scheme is equivalent to removing the scheme. * * @param string $scheme The scheme to use with the new instance. * @return self A new instance with the specified scheme. * @throws \InvalidArgumentException for invalid or unsupported schemes. */ public function withScheme($scheme); /** * Return an instance with the specified user information. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified user information. * * Password is optional, but the user information MUST include the * user; an empty string for the user is equivalent to removing user * information. * * @param string $user User name to use for authority. * @param null|string $password Password associated with $user. * @return self A new instance with the specified user information. */ public function withUserInfo($user, $password = null); /** * Return an instance with the specified host. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified host. * * An empty host value is equivalent to removing the host. * * @param string $host Hostname to use with the new instance. * @return self A new instance with the specified host. * @throws \InvalidArgumentException for invalid hostnames. */ public function withHost($host); /** * Return an instance with the specified port. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified port. * * Implementations MUST raise an exception for ports outside the * established TCP and UDP port ranges. * * A null value provided for the port is equivalent to removing the port * information. * * @param null|int $port Port to use with the new instance; a null value * removes the port information. * @return self A new instance with the specified port. * @throws \InvalidArgumentException for invalid ports. */ public function withPort($port); /** * Return an instance with the specified path. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified path. * * The path MUST be prefixed with "/"; if not, the implementation MAY * provide the prefix itself. * * An empty path value is equivalent to removing the path. * * @param string $path The path to use with the new instance. * @return self A new instance with the specified path. * @throws \InvalidArgumentException for invalid paths. */ public function withPath($path); /** * Return an instance with the specified query string. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified query string. * * If the query string is prefixed by "?", that character MUST be removed. * Additionally, the query string SHOULD be parseable by parse_str() in * order to be valid. * * An empty query string value is equivalent to removing the query string. * * @param string $query The query string to use with the new instance. * @return self A new instance with the specified query string. * @throws \InvalidArgumentException for invalid query strings. */ public function withQuery($query); /** * Return an instance with the specified URI fragment. * * This method MUST retain the state of the current instance, and return * an instance that contains the specified URI fragment. * * If the fragment is prefixed by "#", that character MUST be removed. * * An empty fragment value is equivalent to removing the fragment. * * @param string $fragment The URI fragment to use with the new instance. * @return self A new instance with the specified URI fragment. */ public function withFragment($fragment); /** * Return the string representation of the URI. * * Concatenates the various components of the URI, using the appropriate * delimiters: * * - If a scheme is present, "://" MUST append the value. * - If the authority information is present, that value will be * concatenated. * - If a path is present, it MUST start with a "/" character. * - If a query string is present, it MUST be prefixed by a "?" character. * - If a URI fragment is present, it MUST be prefixed by a "#" character. * * @return string */ public function __toString(); }