Converter
in package
implements
ConverterInterface
Конвертер единиц измерения — точка входа пакета.
Горячий путь оптимизирован pair-кэшем: любая линейная пара единиц один раз сводится к аффинной паре (множитель, слагаемое), после чего каждая конверсия — одно умножение и одно сложение без создания объектов.
Конверсия допускается между единицами одной размерности даже из разных категорий (Дж ↔ Н·м): значения проходят через когерентные СИ-множители категорий. Дельта-единицы (Δ°C) не смешиваются с абсолютными шкалами (°C).
Table of Contents
Interfaces
- ConverterInterface
- Конвертер единиц измерения.
Constants
Properties
- $formatterInstance : Formatter|null
- $pairs : array<string, array{0: float, 1: float}|callable(float): float>
- $parserInstance : Parser|null
- $shared : self|null
- $units : UnitRegistry
Methods
- __construct() : mixed
- convert() : float
- Конвертирует значение между единицами (float-путь, максимальная скорость).
- convertMany() : array<int, float>
- Конвертирует набор значений одной парой единиц.
- convertPrecise() : string
- Конвертация произвольной точности (BCMath): результат — десятичная строка.
- formatter() : Formatter
- Форматтер величин этого конвертера (локали из каталога данных реестра).
- parse() : Quantity
- Разбирает строку «5.5 km» или составную «5 ft 3 in» в величину.
- parser() : Parser
- Парсер величин этого конвертера.
- quantity() : Quantity
- Создаёт величину, привязанную к этому конвертеру.
- registry() : UnitRegistry
- Реестр единиц конвертера.
- setShared() : void
- Подменяет общий конвертер (свой реестр в тестах и приложениях); null — сброс к встроенному.
- shared() : self
- Общий конвертер по умолчанию (для статических фабрик {@see Quantity}).
- toAll() : array<string, float>
- Конвертирует значение во все совместимые единицы категории или в цели.
- toCompound() : array<string, float>
- Раскладывает значение на составные единицы: 5025 с → 1 ч 23 мин 45 с.
- tryConvert() : float|null
- Конвертация без исключений: null при любой ошибке пакета.
- tryParse() : Quantity|null
- Разбор без исключений: null при любой ошибке.
- applySiPrecise() : string
- СИ-переход для точного пути: base·si₁/si₂ строками.
- assertCompatible() : void
- Проверяет совместимость размерностей и согласованность дельта-статуса.
- convertNonLinear() : float
- Нелинейный путь: через базовые единицы категорий и СИ-множители.
- convertUnits() : float
- Конверсия по разрешённым единицам (без строкового pair-кэша).
- linearPair() : array{0: float, 1: float}
- Аффинная пара линейной конверсии: result = value · mul + add.
- pairSlow() : void
- Медленный путь пары: разрешение, проверка совместимости, кэширование аффинной пары или запечённого нелинейного замыкания.
- precisePath() : string
- Точный расчёт: линейный BCMath-путь или float-фолбэк для нелинейных.
Constants
ADD
private
mixed
ADD
= 1
MUL
Аффинная пара конверсии: [множитель, слагаемое].
private
mixed
MUL
= 0
Properties
$formatterInstance
private
Formatter|null
$formatterInstance
= null
$pairs
private
array<string, array{0: float, 1: float}|callable(float): float>
$pairs
= []
аффинные пары и запечённые нелинейные замыкания
$parserInstance
private
Parser|null
$parserInstance
= null
$shared
private
static self|null
$shared
= null
$units read-only
private
UnitRegistry
$units
Methods
__construct()
public
__construct([null|UnitRegistry $registry = null ]) : mixed
Parameters
- $registry : null|UnitRegistry = null
-
реестр единиц; null — встроенные данные
convert()
Конвертирует значение между единицами (float-путь, максимальная скорость).
public
convert(float $value, string|Unit $from, string|Unit $to) : float
Parameters
Attributes
- #[Override]
Return values
floatconvertMany()
Конвертирует набор значений одной парой единиц.
public
convertMany(iterable<string|int, mixed> $values, string|Unit $from, string|Unit $to) : array<int, float>
Parameters
Attributes
- #[Override]
Return values
array<int, float>convertPrecise()
Конвертация произвольной точности (BCMath): результат — десятичная строка.
public
convertPrecise(int|float|string $value, string|Unit $from, string|Unit $to[, int|null $scale = null ]) : string
Parameters
- $value : int|float|string
- $from : string|Unit
- $to : string|Unit
- $scale : int|null = null
-
знаков после запятой результата; null — полная шкала
Attributes
- #[Override]
Return values
stringformatter()
Форматтер величин этого конвертера (локали из каталога данных реестра).
public
formatter() : Formatter
Return values
Formatterparse()
Разбирает строку «5.5 km» или составную «5 ft 3 in» в величину.
public
parse(string $input) : Quantity
Parameters
- $input : string
Return values
Quantityparser()
Парсер величин этого конвертера.
public
parser() : Parser
Return values
Parserquantity()
Создаёт величину, привязанную к этому конвертеру.
public
quantity(float $value, string|Unit $unit) : Quantity
Parameters
- $value : float
- $unit : string|Unit
Attributes
- #[Override]
Return values
Quantityregistry()
Реестр единиц конвертера.
public
registry() : UnitRegistry
Attributes
- #[Override]
Return values
UnitRegistrysetShared()
Подменяет общий конвертер (свой реестр в тестах и приложениях); null — сброс к встроенному.
public
static setShared(self|null $converter) : void
Parameters
- $converter : self|null
shared()
Общий конвертер по умолчанию (для статических фабрик {@see Quantity}).
public
static shared() : self
Return values
selftoAll()
Конвертирует значение во все совместимые единицы категории или в цели.
public
toAll(float $value, string|Unit $from[, array<string|int, mixed>|null $targets = null ]) : array<string, float>
Parameters
- $value : float
- $from : string|Unit
- $targets : array<string|int, mixed>|null = null
-
целевые единицы; null — вся категория
Attributes
- #[Override]
Return values
array<string, float> —код единицы → значение
toCompound()
Раскладывает значение на составные единицы: 5025 с → 1 ч 23 мин 45 с.
public
toCompound(float $value, string|Unit $from, array<string|int, mixed> $targets) : array<string, float>
Parameters
- $value : float
- $from : string|Unit
- $targets : array<string|int, mixed>
-
единицы разложения (крупные → мелкие)
Attributes
- #[Override]
Return values
array<string, float> —код единицы → значение
tryConvert()
Конвертация без исключений: null при любой ошибке пакета.
public
tryConvert(float $value, string|Unit $from, string|Unit $to) : float|null
Parameters
Attributes
- #[Override]
Return values
float|nulltryParse()
Разбор без исключений: null при любой ошибке.
public
tryParse(string $input) : Quantity|null
Parameters
- $input : string
Return values
Quantity|nullapplySiPrecise()
СИ-переход для точного пути: base·si₁/si₂ строками.
private
applySiPrecise(BcCalculator $bc, string $inBase, Unit $from, Unit $to) : string
Parameters
- $bc : BcCalculator
- $inBase : string
- $from : Unit
- $to : Unit
Return values
stringassertCompatible()
Проверяет совместимость размерностей и согласованность дельта-статуса.
private
assertCompatible(Unit $from, Unit $to) : void
Parameters
Tags
convertNonLinear()
Нелинейный путь: через базовые единицы категорий и СИ-множители.
private
convertNonLinear(float $value, Unit $from, Unit $to) : float
Parameters
Return values
floatconvertUnits()
Конверсия по разрешённым единицам (без строкового pair-кэша).
private
convertUnits(float $value, Unit $from, Unit $to) : float
Parameters
Return values
floatlinearPair()
Аффинная пара линейной конверсии: result = value · mul + add.
private
linearPair(Unit $from, Unit $to) : array{0: float, 1: float}
Вывод: v·f₁ + o₁ — в базу; ·si₁/si₂ — сквозь СИ при разных категориях; (x − o₂)/f₂ — из базы цели.
Parameters
Return values
array{0: float, 1: float}pairSlow()
Медленный путь пары: разрешение, проверка совместимости, кэширование аффинной пары или запечённого нелинейного замыкания.
private
pairSlow(string $from, string $to) : void
Parameters
- $from : string
- $to : string
precisePath()
Точный расчёт: линейный BCMath-путь или float-фолбэк для нелинейных.
private
precisePath(BcCalculator $bc, string $normalized, Unit $fromUnit, Unit $toUnit) : string
Parameters
- $bc : BcCalculator
- $normalized : string
- $fromUnit : Unit
- $toUnit : Unit