API reference
This page lists the public members of the base classes. All types are in the
Renfordt\UnitLib namespace.
PhysicalQuantity
Abstract base class implementing JsonSerializable and Stringable. Every quantity
type extends it.
Properties
public readonly float $originalValue;
public readonly UnitOfMeasurement $originalUnit;
public readonly float $nativeValue;
public readonly UnitOfMeasurement $nativeUnit;
Constructor
public function __construct(float $originalValue, string|UnitOfMeasurement $unit)
Throws InvalidArgumentException if the unit cannot be resolved.
Conversion
public function toUnit(string|UnitOfMeasurement $unit): float
public function toNativeUnit(): PhysicalQuantity
toUnit() returns the value in the requested unit. toNativeUnit() returns a new
instance expressed in the native unit.
Arithmetic
public function add(PhysicalQuantity $quantity): PhysicalQuantity
public function subtract(PhysicalQuantity $quantity): PhysicalQuantity
public function multiply(PhysicalQuantity $quantity, ?string $resultType = null): PhysicalQuantity
public function divide(PhysicalQuantity $quantity): PhysicalQuantity
public function power(int $exponent): PhysicalQuantity
add() and subtract() return a new instance of the same type in the native unit.
multiply(), divide(), and power() return derived quantity types and throw
InvalidArgumentException for unsupported combinations. The $resultType argument on
multiply() disambiguates Force × Length between Energy and Torque. divide()
throws if the divisor's native value is zero. See Derived units.
Comparison
public function compareTo(PhysicalQuantity $quantity): int // -1, 0, or 1
public function greaterThan(PhysicalQuantity $quantity): bool
public function lessThan(PhysicalQuantity $quantity): bool
public function greaterThanOrEqualTo(PhysicalQuantity $quantity): bool
public function lessThanOrEqualTo(PhysicalQuantity $quantity): bool
public function equals(PhysicalQuantity $quantity, float $epsilon = 1e-10): bool
All comparison methods throw InvalidArgumentException if the operand is a different
quantity type. See Comparison.
Parsing and serialization
public static function parse(string $input, ?string $expectedClass = null): PhysicalQuantity
public function jsonSerialize(): array
public static function fromJson(array $data): PhysicalQuantity
See Parsing strings and Serialization.
String conversion
public function __toString(): string
Returns "{originalValue} {originalUnit->name}".
Methods for subclasses
abstract protected function initialise(): void;
protected function addUnit(UnitOfMeasurement $unit): void;
protected function findUnit(string $unitName): UnitOfMeasurement;
protected function convert(UnitOfMeasurement $unit): PhysicalQuantity;
initialise() must be implemented by every subclass to register its units. The first
unit registered becomes the native unit. Subclasses with offset-based scales may also
define convertToNativeUnit(float $value, string $unitName): float; the constructor
calls it when present. See Adding new quantities.
UnitOfMeasurement
Value object for a single unit.
Constructor
public function __construct(string $name, float $conversionFactor)
The name is registered as the first alias. The conversion factor is relative to the native unit.
Properties
public readonly string $name;
public float $conversionFactor; // read-only via property hook
public array $aliases; // read-only via property hook
Methods
public function addAlias(string $alias): void
public function isAlias(string $alias): bool
conversionFactor and aliases are accessed as properties, not methods. See
UnitOfMeasurement.
HasSIUnits
Trait adding metric prefix conversion.
public function convertSIUnit(float $value, string $fromUnit, string $toUnit): float
protected function getSIBaseUnit(): string // override per quantity; defaults to 'm'
A quantity uses the trait and overrides getSIBaseUnit() to declare its base unit
symbol. convertSIUnit() throws InvalidArgumentException for invalid units or for a
conversion between units of different powers. See SI units.