science

Quantity

Quantity is a physical entity representing its value as measured amount of physical parameter in specified units system:

use irrevion\science\Physics\Physics;
use irrevion\science\Physics\Entities\Quantity;
use irrevion\science\Physics\Unit\Categories;
use irrevion\science\Physics\Unit\{SI, Planck, IAU, CGS, Natural, NonStandard, Imperial, USC};

$S_pc = new Quantity(12, IAU::parsec);
$S_ly = $S_pc->convert(IAU::light_year);

Obviously, there is protection against converting quantities from different categories, such as time into mass, for example:

$h = new Quantity(3600, SI::second);
try {
	$m = $h->convert(SI::kg);
	print "$h is $m \n";
} catch(\Error $e) {
	print "\n$e \n";
}

outputs:

⚠ Error: length does not match time in D:\dev\xampp\htdocs\science\src\Physics\Physics.php:108
Stack trace:
#0 D:\dev\xampp\htdocs\science\src\Physics\Entities\Quantity.php(26): irrevion\science\Physics\Physics::convert(Object(irrevion\science\Physics\Entities\Quantity), Array)
#1 D:\dev\xampp\htdocs\science\dev\use-cases\test_physics.php(96): irrevion\science\Physics\Entities\Quantity->convert(Object(irrevion\science\Physics\Unit\SI))
#2 {main}

All supported measure units (available at irrevion\science\Physics\Unit\Categories::list) are listed below:

const list = [
	'angle' => [
		'arcminute' => 'Entities\ArcMinute', // NonStandard::arcminute
		'arcsecond' => 'Entities\ArcSecond', // NonStandard::arcsecond
		'degree' => 'Entities\Degree', // NonStandard::degree
		'gon' => 'Entities\Gradian', // NonStandard::grad
		'grad' => 'Entities\Gradian', // NonStandard::grad
		'mas' => 'Entities\MilliArcSecond', // NonStandard::milliarcsecond
		'microarcsecond' => 'Entities\MicroArcSecond', // NonStandard::microarcsecond
		'mil' => 'Entities\MilliRadian', // NonStandard::mrad
		'milliarcsecond' => 'Entities\MilliArcSecond', // NonStandard::milliarcsecond
		'milliradian' => 'Entities\MilliRadian', // NonStandard::mrad
		'mrad' => 'Entities\MilliRadian', // NonStandard::mrad
		'nanoradian' => 'Entities\NanoRadian', // NonStandard::nanoradian
		'nato_mils' => 'Entities\NatoMils', // NonStandard::nato_mils
		'nrad' => 'Entities\NanoRadian', // NonStandard::nrad
		'radian' => 'Entities\Radian', // SI::radian
		'turn' => 'Entities\Turn', // NonStandard::turn
		'ussr_mrad' => 'Entities\UssrMrad', // NonStandard::ussr_mrad
	],
	'angular_square' => [
		'steradian' => 'Entities\Steradian', // SI::steradian
		'spat' => 'Entities\Spat', // NonStandard::spat
		'square_degree' => 'Entities\SquareDegree', // NonStandard::square_degree
		'square_arcminute' => 'Entities\SquareArcMinute', // NonStandard::square_arcminute
		'square_arcsecond' => 'Entities\SquareArcSecond', // NonStandard::square_arcsecond
	],
	'brightness' => [
		'apostilb' => 'Entities\Apostilb', // NonStandard::apostilb
		'bril' => 'Entities\Bril', // NonStandard::bril
		'candela_per_square_metre' => 'Entities\Nit', // SI::candela_per_square_metre
		'nit' => 'Entities\Nit', // SI::nit
		'stilb' => 'Entities\Stilb', // CGS::stilb
	],
	'capacitance' => [
		'abfarad' => 'Entities\AbFarad', // CGS::abfarad
		'farad' => 'Entities\Farad', // SI::farad
		'statfarad' => 'Entities\StatFarad', // CGS::statfarad
	],
	'electric_charge' => [
		'coulomb' => 'Entities\Coulomb',
		'C' => 'Entities\Coulomb',
		'elementary_charge' => 'Entities\ElementaryCharge',
		'e' => 'Entities\ElementaryCharge',
	],
	'electrical_conductance' => [
		'siemens' => 'Entities\Siemens', // SI::siemens
		'hall_conductance' => 'Entities\HallConductance', // NonStandard::hall_conductance
	],
	'electric_current' => [
		'abampere' => 'Entities\AbAmpere',
		'ampere' => 'Entities\Ampere',
		'statampere' => 'Entities\StatAmpere',
	],
	'electric_tension' => [
		'statvolt' => 'Entities\StatVolt',
		'volt' => 'Entities\Volt',
	],
	'electrical_resistance' => [
		'abohm' => 'Entities\AbOhm',
		'ohm' => 'Entities\Ohm',
		'statohm' => 'Entities\StatOhm',
	],
	'energy' => [
		'calorie' => 'Entities\Calorie', // NonStandard::calorie
		'electron_volt' => 'Entities\ElectronVolt',
		'eV' => 'Entities\ElectronVolt', // Natural::eV
		'hartree' => 'Entities\HartreeEnergy', // Natural::hartree
		'joule' => 'Entities\Joule',
		'J' => 'Entities\Joule', // SI::J
		'planck_energy' => 'Entities\PlanckEnergy', // Planck::energy, Natural::planck_energy
		'Ry' => 'Entities\RydbergEnergy', // NonStandard::Ry
		'rydberg' => 'Entities\RydbergEnergy', // NonStandard::rydberg_energy
		'watt_second' => 'Entities\Joule',
	],
	'force' => [
		'au_force' => 'Entities\HartreeForce',
		'hartree_force' => 'Entities\HartreeForce',
		'newton' => 'Entities\Newton',
		'N' => 'Entities\Newton',
		'planck_force' => 'Entities\PlanckForce',
	],
	'frequency' => [
		'caesium133' => 'Entities\Caesium133',
		'hertz' => 'Entities\Hertz',
		'Hz' => 'Entities\Hertz',
	],
	'length' => [
		'angstrom' => 'Entities\Angstrom',
		'astronomical_unit' => 'Entities\AstronomicalUnit',
		'attometre' => 'Entities\Attometre',
		'au' => 'Entities\AstronomicalUnit',
		'bohr_radius' => 'Entities\BohrRadius',
		'centimetre' => 'Entities\Centimetre',
		'gigaparsec' => 'Entities\Gigaparsec', // NonStandard::gigaparsec
		'kilometer' => 'Entities\Kilometre',
		'kilometre' => 'Entities\Kilometre',
		'km' => 'Entities\Kilometre',
		'light_year' => 'Entities\LightYear',
		'ly' => 'Entities\LightYear',
		'metre' => 'Entities\Metre',
		'parsec' => 'Entities\Parsec', // IAU::parsec
		'planck_length' => 'Entities\PlanckLength',
		'rydberg_wavelength' => 'Entities\RydbergWavelength',
	],
	'luminous_intensity' => [
		'candela' => 'Entities\Candela', // SI::candela
		'violle' => 'Entities\Violle', // NonStandard::violle
	],
	'mass' => [
		'AMU' => 'Entities\Dalton', // NonStandard::AMU
		'atomic_mass_unit' => 'Entities\Dalton', // NonStandard::AMU
		'dalton' => 'Entities\Dalton', // NonStandard::dalton
		'electron_mass' => 'Entities\ElectronMass',
		'kilogram' => 'Entities\Kilogram',
		'kg' => 'Entities\Kilogram',
		'pound' => 'Entities\Pound',
		'solar_mass' => 'Entities\SolarMass',
	],
	'power' => [
		'abwatt' => 'Entities\ErgsPerSecond',
		'ergs_per_second' => 'Entities\ErgsPerSecond',
		'watt' => 'Entities\Watt',
		'W' => 'Entities\Watt',
	],
	'pressure' => [
		'barye' => 'Entities\Barye',
		'mm_hg' => 'Entities\MmHg', // NonStandard::mm_hg
		'pascal' => 'Entities\Pascal',
		'Pa' => 'Entities\Pascal',
	],
	'substance_amount' => [
		'mole' => 'Entities\Mole',
		'particle' => 'Entities\Particle',
	],
	'temperature' => [
		'celsius' => 'Entities\Celsius',
		'fahrenheit' => 'Entities\Fahrenheit',
		'kelvin' => 'Entities\Kelvin',
		'K' => 'Entities\Kelvin',
		'rankine' => 'Entities\Rankine',
	],
	'time' => [
		'day' => 'Entities\Day', // 86400 s
		'hour' => 'Entities\Hour', // 3600 s
		'minute' => 'Entities\Minute', // NonStandard::minute
		'planck_time' => 'Entities\PlanckTime',
		'second' => 'Entities\Second',
		'sidereal_day' => 'Entities\SiderealDay', // 86164.0905 s
		'solar_day' => 'Entities\SolarDay', // 86400.002 s
		'stellar_day' => 'Entities\StellarDay', // 86164.098903691 s
		'year' => 'Entities\Year', // 31557600 s (365.25 * 24 * 3600)
	],
];

[!NOTE] Some units can have aliases for better usability. Some units can be represented in more than one units system.