private function parse(?string $authority): array
    {
        $components = ['user' => null, 'pass' => null, 'host' => null, 'port' => null];
        if (null === $authority) {
            return $components;
        }

        if ('' === $authority) {
            $components['host'] = '';

            return $components;
        }

        $parts = explode('@', $authority, 2);
        if (isset($parts[1])) {
            [$components['user'], $components['pass']] = explode(':', $parts[0], 2) + [1 => null];
        }
        preg_match(self::REGEXP_HOST_PORT, $parts[1] ?? $parts[0], $matches);
        $matches += ['port' => ''];
        $components['host'] = $matches['host'];
        $components['port'] = '' === $matches['port'] ? null : $matches['port'];

        return $components;
    }
private function parse(?string $authority): array
    {
        $components = ['user' => null, 'pass' => null, 'host' => null, 'port' => null];
        if (null === $authority) {
            return $components;
        }

        if ('' === $authority) {
            $components['host'] = '';

            return $components;
        }

        $parts = explode('@', $authority, 2);
        if (isset($parts[1])) {
            [$components['user'], $components['pass']] = explode(':', $parts[0], 2) + [1 => null];
        }
        preg_match(self::REGEXP_HOST_PORT, $parts[1] ?? $parts[0], $matches);
        $matches += ['port' => ''];
        $components['host'] = $matches['host'];
        $components['port'] = '' === $matches['port'] ? null : $matches['port'];

        return $components;
    }
private function parse ( ? string $ authority ) : array { $ components = [ 'user' => null , 'pass' => null , 'host' => null , 'port' => null ] ; if ( null === $ authority ) { return $ components ; } if ( '' === $ authority ) { $ components [ 'host' ] = '' ; return $ components ; } $ parts = explode ( '@' , $ authority , 2 ) ; if ( isset ( $ parts [ 1 ] ) ) { [ $ components [ 'user' ] , $ components [ 'pass' ] ] = explode ( ':' , $ parts [ 0 ] , 2 ) + [ 1 => null ] ; } preg_match ( self :: REGEXP_HOST_PORT , $ parts [ 1 ] ?? $ parts [ 0 ] , $ matches ) ; $ matches += [ 'port' => '' ] ; $ components [ 'host' ] = $ matches [ 'host' ] ; $ components [ 'port' ] = '' === $ matches [ 'port' ] ? null : $ matches [ 'port' ] ; return $ components ; }
Extracts the authority parts from a given string.

@param ?string $authority
Extracts the authority parts from a given string .