private static function parseSegmentFromPath($path, &$index)
    {
        if ($index >= strlen($path)) {
            // A trailing '/' has caused the index to exceed the bounds
            // of the string - provide a helpful error message.
            throw self::parseError($path, strlen($path) - 1, "invalid trailing '/'");
        }
        if ($path[$index] === '{') {
            // Validate that the { has a matching }
            $closingBraceIndex = strpos($path, '}', $index);
            if ($closingBraceIndex === false) {
                throw self::parseError(
                    $path,
                    strlen($path),
                    "Expected '}' to match '{' at index $index, got end of string"
                );
            }

            $segmentStringLengthWithoutBraces = $closingBraceIndex - $index - 1;
            $segmentStringWithoutBraces = substr($path, $index + 1, $segmentStringLengthWithoutBraces);
            $index = $closingBraceIndex + 1;
            return self::parseVariableSegment($segmentStringWithoutBraces);
        } else {
            $nextSlash = strpos($path, '/', $index);
            if ($nextSlash === false) {
                $nextSlash = strlen($path);
            }
            $segmentString = substr($path, $index, $nextSlash - $index);
            $index = $nextSlash;
            return self::parse($segmentString, $path, $index);
        }
    }
private static function parseSegmentFromPath($path, &$index)
    {
        if ($index >= strlen($path)) {
            // A trailing '/' has caused the index to exceed the bounds
            // of the string - provide a helpful error message.
            throw self::parseError($path, strlen($path) - 1, "invalid trailing '/'");
        }
        if ($path[$index] === '{') {
            // Validate that the { has a matching }
            $closingBraceIndex = strpos($path, '}', $index);
            if ($closingBraceIndex === false) {
                throw self::parseError(
                    $path,
                    strlen($path),
                    "Expected '}' to match '{' at index $index, got end of string"
                );
            }

            $segmentStringLengthWithoutBraces = $closingBraceIndex - $index - 1;
            $segmentStringWithoutBraces = substr($path, $index + 1, $segmentStringLengthWithoutBraces);
            $index = $closingBraceIndex + 1;
            return self::parseVariableSegment($segmentStringWithoutBraces);
        } else {
            $nextSlash = strpos($path, '/', $index);
            if ($nextSlash === false) {
                $nextSlash = strlen($path);
            }
            $segmentString = substr($path, $index, $nextSlash - $index);
            $index = $nextSlash;
            return self::parse($segmentString, $path, $index);
        }
    }
private static function parseSegmentFromPath ( $ path , & $ index ) { if ( $ index >= strlen ( $ path ) ) { // A trailing '/' has caused the index to exceed the bounds // of the string - provide a helpful error message. throw self :: parseError ( $ path , strlen ( $ path ) - 1 , "invalid trailing '/'" ) ; } if ( $ path [ $ index ] === '{' ) { // Validate that the { has a matching } $ closingBraceIndex = strpos ( $ path , '}' , $ index ) ; if ( $ closingBraceIndex === false ) { throw self :: parseError ( $ path , strlen ( $ path ) , "Expected '}' to match '{' at index $index, got end of string" ) ; } $ segmentStringLengthWithoutBraces = $ closingBraceIndex - $ index - 1 ; $ segmentStringWithoutBraces = substr ( $ path , $ index + 1 , $ segmentStringLengthWithoutBraces ) ; $ index = $ closingBraceIndex + 1 ; return self :: parseVariableSegment ( $ segmentStringWithoutBraces ) ; } else { $ nextSlash = strpos ( $ path , '/' , $ index ) ; if ( $ nextSlash === false ) { $ nextSlash = strlen ( $ path ) ; } $ segmentString = substr ( $ path , $ index , $ nextSlash - $ index ) ; $ index = $ nextSlash ; return self :: parse ( $ segmentString , $ path , $ index ) ; } }
Given a path and an index, reads a Segment from the path and updates
the index.

@param string $path
@param int $index
@return Segment
@throws ValidationException
Given a path and an index reads a Segment from the path and updates the index .