Parser
in package
implements
ParserInterface
Разбор строковых величин: «5.5 km», «5,5 км», «-1 h 30 min», «5ft 3in».
Запятая принимается как десятичный разделитель; разделители тысяч не поддерживаются (неотличимы от составных величин). Входная строка ограничена по длине — защита от рассчитанных на исчерпание ресурсов данных.
Table of Contents
Interfaces
- ParserInterface
- Разбор строкового представления величин.
Constants
- MAX_INPUT_LENGTH : mixed = 256
- Максимальная длина входной строки в байтах.
- NUMBER_PATTERN : mixed = '/^([+-]?(?:\d+(?:[.,]\d+)?|[.,]\d+)(?:[eE][+-]...
- Числовой токен: знак, целая/дробная часть, экспонента.
Properties
Methods
- __construct() : mixed
- parse() : Quantity
- Разбирает строку в величину.
- tryParse() : Quantity|null
- Разбор без исключений: null при любой ошибке пакета.
- consumeNumberToken() : float|null
- Обрабатывает числовой токен: «5.5» откладывается до единицы, «5.5km» сразу становится компонентом.
- toFloat() : float
- Числовой токен в float: запятая — десятичный разделитель.
- tokenize() : array<int, array{0: float, 1: string}>
- Разбивает строку на компоненты «число + единица».
- trySingle() : Quantity|null
- Быстрый путь «одно число + единица целиком»: поддерживает многословные алиасы («морская миля», «квадратный метр»).
Constants
MAX_INPUT_LENGTH
Максимальная длина входной строки в байтах.
private
mixed
MAX_INPUT_LENGTH
= 256
NUMBER_PATTERN
Числовой токен: знак, целая/дробная часть, экспонента.
private
mixed
NUMBER_PATTERN
= '/^([+-]?(?:\d+(?:[.,]\d+)?|[.,]\d+)(?:[eE][+-]?\d+)?)(.*)$/'
Properties
$converter read-only
private
Converter
$converter
Methods
__construct()
public
__construct(Converter $converter) : mixed
Parameters
- $converter : Converter
parse()
Разбирает строку в величину.
public
parse(string $input) : Quantity
Parameters
- $input : string
Attributes
- #[Override]
Return values
QuantitytryParse()
Разбор без исключений: null при любой ошибке пакета.
public
tryParse(string $input) : Quantity|null
Parameters
- $input : string
Attributes
- #[Override]
Return values
Quantity|nullconsumeNumberToken()
Обрабатывает числовой токен: «5.5» откладывается до единицы, «5.5km» сразу становится компонентом.
private
consumeNumberToken(array<int, array{0: float, 1: string}> &$components, float|null $pendingNumber, array<int|string, string> $match, string $input) : float|null
Parameters
- $components : array<int, array{0: float, 1: string}>
- $pendingNumber : float|null
- $match : array<int|string, string>
- $input : string
Tags
Return values
float|nulltoFloat()
Числовой токен в float: запятая — десятичный разделитель.
private
toFloat(string $number) : float
Parameters
- $number : string
Tags
Return values
floattokenize()
Разбивает строку на компоненты «число + единица».
private
tokenize(string $input) : array<int, array{0: float, 1: string}>
Parameters
- $input : string
Tags
Return values
array<int, array{0: float, 1: string}>trySingle()
Быстрый путь «одно число + единица целиком»: поддерживает многословные алиасы («морская миля», «квадратный метр»).
private
trySingle(string $input) : Quantity|null
Parameters
- $input : string