public static function fromString($uri)
    {
        $parameters = parse_url($uri);

        if (isset($parameters['user'])) {
            $parameters['username'] = $parameters['user'];
        }

        if (isset($parameters['pass'])) {
            $parameters['password'] = $parameters['pass'];
        }

        if (isset($parameters['path']) && strlen($parameters['path']) > 0) {
            list(, $parameters['database']) = explode('/', $parameters['path'], 2);
        }

        unset($parameters['path'], $parameters['user'], $parameters['pass']);

        return self::fromArray($parameters);
    }