/**
* 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 The user name to use for authority.
* @param null|string $password The password associated with $user.
* @return self A new instance with the specified user information.
*/
public function withUserInfo($user, $password = null)
{
$uriAsString = $this->uriAsString;
$url = new Url($uriAsString);
if (empty($user)) {
$url->set('user', null);
$url->set('pass', null);
} else {
$url->set('user', $user);
$url->set('pass', $password);
}
return new self($url->getUrl());
}