Quantity
in package
implements
JsonSerializable, Stringable
Иммутабельная величина: значение + единица измерения.
Любая операция возвращает новую величину. Арифметика физически корректна: сложение конвертирует операнды к общей единице, умножение и деление величин выполняют размерностный анализ (10 м / 2 с = 5 м/с), а абсолютные температурные шкалы защищены от бессмысленных операций — сумма 30 °C + 20 °C отклоняется, разность возвращает дельту Δ°C.
Table of Contents
Interfaces
- JsonSerializable
- Stringable
Properties
- $converter : Converter
- $unitObject : Unit
- $value : float
Methods
- __toString() : string
- Строковое представление: «5.25 km».
- abs() : self
- Абсолютное значение.
- add() : self
- Сложение. Числовой операнд трактуется в единице этой величины.
- avg() : self
- Среднее арифметическое набора (в единице первой величины).
- ceil() : self
- Округление вверх.
- code() : string
- Код единицы измерения.
- compareTo() : int
- Трёхстороннее сравнение с конверсией операнда к этой единице.
- div() : self
- Деление на скаляр или величину (размерностный анализ).
- equals() : bool
- Равенство с допуском (в этой единице).
- floor() : self
- Округление вниз.
- format() : string
- Форматирует величину: «5,25 км» (локализация и плюрализация — Formatter).
- fromArray() : self
- Восстанавливает величину из массива {@see Quantity::toArray()}.
- greaterThan() : bool
- Строго больше.
- greaterThanOrEqual() : bool
- Больше или равно.
- humanize() : string
- Человекочитаемое представление в лучшей единице: 1500 м → «1,5 км».
- in() : self
- Создаёт величину для конкретного конвертера (используется конвертером).
- invert() : self
- Обратная величина: 1/x с обращением размерности.
- isNegative() : bool
- Отрицательное ли значение.
- isPositive() : bool
- Положительное ли значение.
- isSameDimension() : bool
- Совпадают ли размерности величин.
- isZero() : bool
- Нулевое ли значение.
- jsonSerialize() : array{value: float, unit: string}
- Сериализация в JSON.
- lessThan() : bool
- Строго меньше.
- lessThanOrEqual() : bool
- Меньше или равно.
- max() : self
- Максимальная величина набора.
- min() : self
- Минимальная величина набора.
- mul() : self
- Умножение на скаляр или величину (размерностный анализ).
- negate() : self
- Смена знака.
- of() : self
- Создаёт величину через общий конвертер.
- parse() : self
- Разбирает строку «5.5 km» или составную «5 ft 3 in» (общий конвертер).
- pow() : self
- Возведение в целую степень (размерность возводится вместе со значением).
- round() : self
- Округление значения.
- simplify() : self
- Автоматический выбор «лучшей» единицы той же системы: 1500 м → 1.5 км.
- sub() : self
- Вычитание. Разность двух точек аффинной шкалы — дельта: 30 °C − 20 °C = 10 Δ°C; вычитание дельты сдвигает точку шкалы.
- sum() : self
- Сумма набора величин (в единице первой).
- to() : self
- Конвертирует величину в другую единицу.
- toAll() : array<string, self>
- Величина во всех совместимых единицах категории или в заданных целях.
- toArray() : array{value: float, unit: string}
- Сериализация в массив.
- toBase() : self
- Конвертирует в базовую единицу категории.
- toCompound() : array<string, self>
- Раскладывает величину на составные единицы: 1.5 ч → 1 ч 30 мин.
- tryParse() : self|null
- Разбор без исключений: null при ошибке.
- unit() : Unit
- Единица измерения.
- value() : float
- Числовое значение.
- __construct() : mixed
- affineDifference() : self
- Разность точек аффинной шкалы — дельта в парной дельта-единице.
- assertScalable() : void
- Отклоняет масштабирование точек аффинных шкал (умножение 30 °C бессмысленно).
- candidateScore() : array{0: int, 1: float}
- Ключ ранжирования кандидата: массивы сравниваются поэлементно, поэтому [0, x] (значение ≥1: меньше — лучше) всегда выигрывает у [1, −y] (значение <1: больше — лучше, ближе к единице).
- derived() : self
- Строит величину результата размерностного анализа.
- extremum() : self
- Общий поиск экстремума набора.
- isSimplifyCandidate() : bool
- Пригодна ли единица для simplify: та же система, линейная, не дельта.
- pickBestUnit() : Unit, 1: float}
- Ищет единицу той же системы, дающую значение, ближайшее к диапазону 1…999.
- siValue() : float
- Значение в когерентных СИ-единицах размерности.
- withDeltaApplied() : self
- Прибавляет дельту к точке шкалы (знак задаёт направление).
Properties
$converter read-only
private
Converter
$converter
$unitObject read-only
private
Unit
$unitObject
$value read-only
private
float
$value
Methods
__toString()
Строковое представление: «5.25 km».
public
__toString() : string
Attributes
- #[Override]
Return values
stringabs()
Абсолютное значение.
public
abs() : self
Return values
selfadd()
Сложение. Числовой операнд трактуется в единице этой величины.
public
add(self|float $other) : self
Для абсолютных шкал допустимо только прибавление дельты: 20 °C + 5 Δ°C = 25 °C, а 20 °C + 20 °C отклоняется.
Parameters
- $other : self|float
Return values
selfavg()
Среднее арифметическое набора (в единице первой величины).
public
static avg(iterable<string|int, self> $quantities) : self
Parameters
- $quantities : iterable<string|int, self>
Return values
selfceil()
Округление вверх.
public
ceil() : self
Return values
selfcode()
Код единицы измерения.
public
code() : string
Return values
stringcompareTo()
Трёхстороннее сравнение с конверсией операнда к этой единице.
public
compareTo(self $other) : int
Parameters
- $other : self
Return values
intdiv()
Деление на скаляр или величину (размерностный анализ).
public
div(self|float $other) : self
Parameters
- $other : self|float
Return values
selfequals()
Равенство с допуском (в этой единице).
public
equals(self $other[, float $tolerance = 0.0 ]) : bool
Parameters
- $other : self
- $tolerance : float = 0.0
Return values
boolfloor()
Округление вниз.
public
floor() : self
Return values
selfformat()
Форматирует величину: «5,25 км» (локализация и плюрализация — Formatter).
public
format([int|null $precision = null ][, string $locale = 'ru' ][, bool $long = false ]) : string
Parameters
- $precision : int|null = null
- $locale : string = 'ru'
- $long : bool = false
Return values
stringfromArray()
Восстанавливает величину из массива {@see Quantity::toArray()}.
public
static fromArray(array<string|int, mixed> $data) : self
Parameters
- $data : array<string|int, mixed>
-
массив с ключами value и unit
Return values
selfgreaterThan()
Строго больше.
public
greaterThan(self $other) : bool
Parameters
- $other : self
Return values
boolgreaterThanOrEqual()
Больше или равно.
public
greaterThanOrEqual(self $other) : bool
Parameters
- $other : self
Return values
boolhumanize()
Человекочитаемое представление в лучшей единице: 1500 м → «1,5 км».
public
humanize([string $locale = 'ru' ][, int|null $precision = 2 ]) : string
Parameters
- $locale : string = 'ru'
- $precision : int|null = 2
Return values
stringin()
Создаёт величину для конкретного конвертера (используется конвертером).
public
static in(float $value, Unit $unit, Converter $converter) : self
Parameters
Return values
selfinvert()
Обратная величина: 1/x с обращением размерности.
public
invert() : self
Return values
selfisNegative()
Отрицательное ли значение.
public
isNegative() : bool
Return values
boolisPositive()
Положительное ли значение.
public
isPositive() : bool
Return values
boolisSameDimension()
Совпадают ли размерности величин.
public
isSameDimension(self $other) : bool
Parameters
- $other : self
Return values
boolisZero()
Нулевое ли значение.
public
isZero() : bool
Return values
booljsonSerialize()
Сериализация в JSON.
public
jsonSerialize() : array{value: float, unit: string}
Attributes
- #[Override]
Return values
array{value: float, unit: string}lessThan()
Строго меньше.
public
lessThan(self $other) : bool
Parameters
- $other : self
Return values
boollessThanOrEqual()
Меньше или равно.
public
lessThanOrEqual(self $other) : bool
Parameters
- $other : self
Return values
boolmax()
Максимальная величина набора.
public
static max(iterable<string|int, self> $quantities) : self
Parameters
- $quantities : iterable<string|int, self>
Return values
selfmin()
Минимальная величина набора.
public
static min(iterable<string|int, self> $quantities) : self
Parameters
- $quantities : iterable<string|int, self>
Return values
selfmul()
Умножение на скаляр или величину (размерностный анализ).
public
mul(self|float $other) : self
Parameters
- $other : self|float
Return values
selfnegate()
Смена знака.
public
negate() : self
Return values
selfof()
Создаёт величину через общий конвертер.
public
static of(int|float $value, string|Unit $unit) : self
Parameters
- $value : int|float
- $unit : string|Unit
Return values
selfparse()
Разбирает строку «5.5 km» или составную «5 ft 3 in» (общий конвертер).
public
static parse(string $input) : self
Parameters
- $input : string
Return values
selfpow()
Возведение в целую степень (размерность возводится вместе со значением).
public
pow(int $exponent) : self
Parameters
- $exponent : int
Return values
selfround()
Округление значения.
public
round([int $precision = 0 ]) : self
Parameters
- $precision : int = 0
Return values
selfsimplify()
Автоматический выбор «лучшей» единицы той же системы: 1500 м → 1.5 км.
public
simplify() : self
Аффинные и нелинейные единицы возвращаются без изменения.
Return values
selfsub()
Вычитание. Разность двух точек аффинной шкалы — дельта: 30 °C − 20 °C = 10 Δ°C; вычитание дельты сдвигает точку шкалы.
public
sub(self|float $other) : self
Parameters
- $other : self|float
Return values
selfsum()
Сумма набора величин (в единице первой).
public
static sum(iterable<string|int, self> $quantities) : self
Parameters
- $quantities : iterable<string|int, self>
Return values
selfto()
Конвертирует величину в другую единицу.
public
to(string|Unit $unit) : self
Parameters
- $unit : string|Unit
Return values
selftoAll()
Величина во всех совместимых единицах категории или в заданных целях.
public
toAll([null|array<int, string|Unit> $targets = null ]) : array<string, self>
Parameters
- $targets : null|array<int, string|Unit> = null
Return values
array<string, self>toArray()
Сериализация в массив.
public
toArray() : array{value: float, unit: string}
Return values
array{value: float, unit: string}toBase()
Конвертирует в базовую единицу категории.
public
toBase() : self
Return values
selftoCompound()
Раскладывает величину на составные единицы: 1.5 ч → 1 ч 30 мин.
public
toCompound(array<int, string|Unit> $targets) : array<string, self>
Parameters
- $targets : array<int, string|Unit>
Return values
array<string, self>tryParse()
Разбор без исключений: null при ошибке.
public
static tryParse(string $input) : self|null
Parameters
- $input : string
Return values
self|nullunit()
Единица измерения.
public
unit() : Unit
Return values
Unitvalue()
Числовое значение.
public
value() : float
Return values
float__construct()
private
__construct(float $value, Unit $unitObject, Converter $converter) : mixed
Parameters
affineDifference()
Разность точек аффинной шкалы — дельта в парной дельта-единице.
private
affineDifference(self $other) : self
Parameters
- $other : self
Return values
selfassertScalable()
Отклоняет масштабирование точек аффинных шкал (умножение 30 °C бессмысленно).
private
assertScalable(string $operation) : void
Parameters
- $operation : string
candidateScore()
Ключ ранжирования кандидата: массивы сравниваются поэлементно, поэтому [0, x] (значение ≥1: меньше — лучше) всегда выигрывает у [1, −y] (значение <1: больше — лучше, ближе к единице).
private
candidateScore(float $converted) : array{0: int, 1: float}
Parameters
- $converted : float
Return values
array{0: int, 1: float}derived()
Строит величину результата размерностного анализа.
private
derived(float $siValue, Dimension $dimension) : self
Parameters
- $siValue : float
- $dimension : Dimension
Return values
selfextremum()
Общий поиск экстремума набора.
private
static extremum(iterable<string|int, self> $quantities, int $direction) : self
Parameters
- $quantities : iterable<string|int, self>
- $direction : int
Return values
selfisSimplifyCandidate()
Пригодна ли единица для simplify: та же система, линейная, не дельта.
private
isSimplifyCandidate(Unit $candidate) : bool
Parameters
- $candidate : Unit
Return values
boolpickBestUnit()
Ищет единицу той же системы, дающую значение, ближайшее к диапазону 1…999.
private
pickBestUnit() : Unit, 1: float}
Сама величина — всегда допустимый стартовый кандидат (охранные условия simplify уже отсекли аффинные и нелинейные), поэтому лучший существует безусловно. Ранжирование — лексикографический ключ Quantity::candidateScore().
Return values
Unit, 1: float}siValue()
Значение в когерентных СИ-единицах размерности.
private
siValue() : float
Return values
floatwithDeltaApplied()
Прибавляет дельту к точке шкалы (знак задаёт направление).
private
withDeltaApplied(self $delta, float $sign) : self
Parameters
- $delta : self
- $sign : float