src/Valkyrja/HttpMessage/NativeUri.php
public function withPath(string $path): Uri
    {
        if ($path === $this->path) {
            return clone $this;
        }

        $path = $this->validatePath($path);

        $new = clone $this;

        $new->path = $path;

        return $new;
    }
public function withPath(string $path): Uri
    {
        if ($path === $this->path) {
            return clone $this;
        }

        $path = $this->validatePath($path);

        $new = clone $this;

        $new->path = $path;

        return $new;
    }
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 can either be empty or absolute (starting with a slash) or
rootless (not starting with a slash). Implementations MUST support all
three syntaxes.

If the path is intended to be domain-relative rather than path relative
then it must begin with a slash ("/"). Paths not starting with a slash
("/") are assumed to be relative to some base path known to the
application or consumer.

Users can provide both encoded and decoded path characters.
Implementations ensure the correct encoding as outlined in getPath().

@param string $path The path to use with the new instance.

@throws \Valkyrja\HttpMessage\Exceptions\InvalidPath for invalid paths.

@return static A new instance with the specified path.