brewerwall/unitz

一个单元存储模型,用于管理单元之间的值

1.0.15 2024-03-06 04:46 UTC

This package is auto-updated.

Last update: 2024-09-06 05:50:06 UTC


README

example workflow

介绍

Unitz是一种轻松处理各种可测量单位之间转换的方法。这是一个将单位转换为所有类型并独立于原始单位类型的工具。

安装

composer require brewerwall/unitz

单类型使用

// Create a new Gravity Object
$gravity = new Gravity(plato: 12);

// Gets the Plato of our Gravity
$plato = $gravity->getPlato();

// Gets the Specific Gravity of our Gravity
$specificGravity = $gravity->getSpecificGravity();

// Gets the Brix of our Gravity
$brix = $gravity->getBrix();

// Gets our Preferred Unit of measure based on our preferences
$plato = $gravity->getValue();

服务提供商使用

您可以将UnitzService类注入到应用程序中。通过构造函数中的参数设置用户的偏好,您可以使用getValue()方法获取用户的首选单位。

// Instantiate a new UnitzService in a Service Provider Pattern
$unitService = new UnitzService(preferences: ['Temperature' => 'Celsius']);

// Dependency injection of UnitzService within the application
$temperature = $unitService->makeTemperature(fahrenheit: 72);

// Output of getValue() based on the user's preferences
$temperature->getValue(); // 22.222222222222

// Output of getValue() based on the user's preferences with rounding
$temperature->getValue(1); // 22.2

以用户为中心的单位创建

当在UnitService中设置用户的偏好时,您不再需要使用Unit构造函数中的userValue参数来指定用户输入的单位类型。如果需要更改用户的值,setValue()方法也会达到相同的效果。

// Create a new Gravity Object
$gravity = new Gravity(userValue: 12, preferences: ['Gravity' => 'Brix']);

// Gets the Brix of our Gravity
$brix = $gravity->getBrix();  // 12

// Gets our Preferred Unit of measure based on our preferences
$plato = $gravity->getValue(); // 12

以用户为中心的服务提供商

// Instantiate a new UnitzService in a Service Provider Pattern
$unitService = new UnitzService(preferences: ['Temperature' => 'Fahrenheit']);

// Dependency injection of UnitzService within the application and a user submitted form value
$temperature = $unitService->makeTemperature(userValue: 72);

// Output of getValue() based on the user's preferences
$temperature->getValue(); // 72

// Output of getFahrenheit() will return the same as getValue() since it's the user's preference
$temperature->getFahrenheit(); // 72

// Updating the user's temperature value will have the same effect.
$temperature->setValue(76);

// Values update as needed
$temperature->getValue(); // 76
$temperature->getFahrenheit(); // 76

可用单位

偏好

默认情况下,所有单位都有一个返回用户偏好单位类型的getValue()方法。已设置默认偏好,但在实例化新单位时可以覆盖。

默认
[
    'Gravity' => 'Plato',
    'Temperature' => 'Fahrenheit',
    'Volume' => 'Gallon',
    'Pressure' => 'Psi',
    'Weight' => 'Pound',
    'Color' => 'Srm',
    'Time' => 'Minute',
    'Distillate' => 'Proof',
    'Length' => 'Foot',
];
示例
// Create a new Weight Object
$weight = new Weight(kilogram: 7.5, preferences: ['Weight' => 'Kilogram']);

// Returns Kilogram since that is the overridden preference
$kilogram = $weight->getValue();

舍入

在每种类型的get方法中,可以选择传递舍入的精度。这还包括所有单位共有的getValue()方法。

$weight = new Weight(kilogram: 7.5629145);

$kilogram = $weight->getKilogram(3);  // $kilogram = 7.563

比率

表示两个单位之间变化率的方法。访问比率值时,所有都将遵循命名模式$rate->get{Unit}Per{Unit},分别对应各自的单位。例如使用流量:$flow->getGallonPerHour()

流量

此类表示在一段时间内流过的体积量。

$flow = new Flow(new Volume(gallon: 5), new Time(hour: 1));

$flow->getGallonPerHour(); // 5

$flow->getGallonPerMinute(); // 0.083333333333333

煮沸

此类表示在一段时间内煮沸的体积量。

$boil = new Boil(new Volume(gallon: 5), new Time(hour: 1));

$boil->getGallonPerHour(); // 5

$boil->getGallonPerMinute(); // 0.083333333333333

速度

此类表示在一段时间内行进的长度量。

$speed = new Speed(new Length(foot: 5), new Time(minute: 1));

$speed->getFeetPerMinute(); // 5

$boil->getFeetPerHour(); // 300

计算

一个可用于与各种Unitz类一起使用的计算库。

面积

此类将计算与面积相关的计算。

矩形

此方法将根据长度和宽度计算矩形的面积。

Area::rectangle(Length $length, Length $width): Length
参数
  • Length $length - 矩形的长度
  • Length $width - 矩形的宽度
返回
  • Length - 矩形的面积

正方形

此方法将根据一边的长度计算正方形的面积。

Area::square(Length $side): Length
参数
  • Length $side - 正方形一边的长度
返回
  • Length - 正方形的面积

圆形

此方法将根据半径计算圆的面积。

Area::circle(Length $radius): Length
参数
  • Length $radius - 圆的半径
返回
  • Length - 圆的面积

椭圆

此方法将根据主轴和副轴半径计算椭圆的面积。

Area::ellipse(Length $majorAxisRadius, Length $minorAxisRadius): Length
参数
  • Length $majorAxisRadius - 椭圆的主轴半径
  • Length $minorAxisRadius - 椭圆的副轴半径
返回
  • Length - 椭圆的面积

三角形

此方法将根据底边和高度计算三角形的面积。

Area::triangle(Length $base, Length $height): Length
参数
  • Length $base - 三角形的底边
  • Length $height - 三角形的高度
返回
  • Length - 三角形的面积

等边三角形

此方法将基于等边三角形的一边长度计算其面积。

Area::equilateralTriangle(Length $side): Length
参数
  • Length $side - 等边三角形的一边长度
返回
  • Length - 等边三角形的面积

梯形

此方法将基于梯形的两个底边长度和高度计算其面积。

Area::trapezoid(Length $base1, Length $base2, Length $height): Length
参数
  • Length $base1 - 梯形第一个底边的长度
  • Length $base2 - 梯形第二个底边的长度
  • Length $height - 梯形的高度
返回
  • Length - 梯形的面积

正五边形

此方法将基于正五边形的一边长度计算其面积。

Area::regularPentagon(Length $side): Length
参数
  • Length $side - 正五边形的一边长度
返回
  • Length - 正五边形的面积

正六边形

此方法将基于正六边形的一边长度计算其面积。

Area::regularHexagon(Length $side): Length
参数
  • Length $side - 正六边形的一边长度
返回
  • Length - 正六边形的面积

正七边形

此方法将基于正七边形的一边长度计算其面积。

Area::regularHeptagon(Length $side): Length
参数
  • Length $side - 正七边形的一边长度
返回
  • Length - 正七边形的面积

正八边形

此方法将基于正八边形的一边长度计算其面积。

Area::regularOctagon(Length $side): Length
参数
  • Length $side - 正八边形的一边长度
返回
  • Length - 正八边形的面积

正九边形

此方法将基于正九边形的一边长度计算其面积。

Area::regularNonagon(Length $side): Length
参数
  • Length $side - 正九边形的一边长度
返回
  • Length - 正九边形的面积

正十边形

此方法将基于正十边形的一边长度计算其面积。

Area::regularDecagon(Length $side): Length
参数
  • Length $side - 正十边形的一边长度
返回
  • Length - 正十边形的面积

啤酒

此类将计算与啤酒相关的计算。

酒精体积百分比 (ABV)

酒精体积百分比 (ABV) 是基于原麦汁比重、最终麦汁比重和公式版本计算出的啤酒中酒精含量的百分比。公式的来源是 酿酒师朋友

Beer::alcoholByVolume(Gravity $originalGravity, Gravity $finalGravity, string $formulaVersion = Beer::ABV_ALTERNATE_FORMULA): float
参数
  • Gravity $originalGravity - 啤酒的原麦汁比重
  • Gravity $finalGravity - 啤酒的最终麦汁比重
  • string $formulaVersion - 公式 ABV 计算:Beer::ABV_STANDARD_FORMULABeer::ABV_ALTERNATE_FORMULA
返回
  • float - 酒精体积百分比 (ABV) 值

酒精重量百分比 (ABW)

酒精重量百分比 (ABW) 是通过称量固定体积的液体中的酒精量,并将其与纯水的重量进行比较,基于原麦汁比重和最终麦汁比重。

Beer::alcoholByWeight(Gravity $originalGravity, Gravity $finalGravity): float
参数
  • Gravity $originalGravity - 啤酒的原麦汁比重
  • Gravity $finalGravity - 啤酒的最终麦汁比重
返回
  • float - 酒精重量百分比 (ABW) 值

标准参考方法 (SRM)

标准参考方法 (Srm) 是根据美国酿造化学家协会推荐的方法出版的麦汁或啤酒颜色评估方法。

Beer::standardReferenceMethod(Weight $weight, Color $color, Volume $volume): Color
参数
  • Weight $weight - 谷物的重量
  • Color $color - 谷物的颜色
  • Volume $volume - 水的体积
返回
  • Unitz/Color - 颜色 (颜色) 值

麦芽色单位 (MCU)

麦芽色单位 (MCU) 是一个帮助确定啤酒颜色的方程。

Beer::maltColorUnit(Weight $weight, Color $color, Volume $volume): float
参数
  • Weight $weight - 谷物的重量
  • Color $color - 谷物的颜色
  • Volume $volume - 水的体积
返回
  • float - 麦芽色单位 (MCU) 值

国际苦度单位 (IBU)

国际苦度单位 (IBU) 是基于啤酒中啤酒花α酸含量、啤酒花重量、煮沸时间、麦汁比重和麦汁体积的苦度。

基于Palmer的计算

Beer::internationalBitternessUnits(float $alphaAcid, Weight $weight, Time $time, Gravity $gravity, Volume $volume)
参数
  • float $alphaAcid - 啤酒花的α酸含量
  • Weight $weight - 啤酒花的重量
  • Time $time - 煮沸时间
  • 重力 $gravity - 麦汁重力
  • 体积 $volume - 麦汁体积
返回
  • float - 国际苦度单位 (IBU) 值

α酸单位 (AAU)

α酸单位 (AAU) 是基于α酸和重量计算的花椒潜在苦度。

Beer::alphaAcidUnit(float $alphaAcid, Weight $weight): float
参数
  • float $alphaAcid - 啤酒花的α酸含量
  • Weight $weight - 啤酒花的重量
返回
  • float - α酸单位 (AAU) 值

花椒利用率

这是基于 Glenn Tinseth 公式的一个花椒利用率因子,该公式由 Glenn Tinseth 提出。

Beer::hopUtilization(Time $time, Gravity $gravity)
参数
  • Time $time - 煮沸时间
  • 重力 $gravity - 麦汁重力
返回
  • float - 花椒利用率值

卡路里

根据原麦汁比重、最终麦汁比重和啤酒消耗体积确定成品啤酒中的卡路里数量。

Beer::calories(Gravity $originalGravity, Gravity $finalGravity, Volume $volume)
参数
  • Gravity $originalGravity - 啤酒的原麦汁比重
  • Gravity $finalGravity - 啤酒的最终麦汁比重
  • 体积 $volume - 消耗的啤酒体积
返回
  • float - 卡路里

真实提取物

真实提取物 (RE) 是关于啤酒重力的精确计算。方程来源为 Craft Beer & Brewing

Beer::realExtract(Gravity $originalGravity, Gravity $finalGravity)
参数
  • Gravity $originalGravity - 啤酒的原麦汁比重
  • Gravity $finalGravity - 啤酒的最终麦汁比重
返回
  • float - 真实提取物

外观发酵度

外观发酵度 (ADF) 是指在发酵过程中酵母将糖转化为酒精和二氧化碳的量。

Beer::apparentDegreeOfFermentation(Gravity $originalGravity, Gravity $finalGravity)
参数
  • Gravity $originalGravity - 啤酒的原麦汁比重
  • Gravity $finalGravity - 啤酒的最终麦汁比重
返回
  • float - 外观发酵度

比重校正

根据样品温度和比重计校准温度进行比重校正。来源 Brewers Friend

Beer::gravityCorrection(Gravity $gravity, Temperature $temperature, Temperature $calibrationTemperature)
参数
  • 重力 $gravity - 样品比重
  • 温度 $temperature - 样品温度
  • 温度 $calibrationTemperature - 比重计校准的温度
返回
  • Gravity - 校正后的样品比重

酒精

此类将计算与酒精相关的计算。

稀释到期望的酒精度

稀释到期望的酒精度是一种计算,用于确定需要添加多少水到酒精中以达到期望的酒精度。

Spirit::diluteDownToDesiredProof(Proof $currentProof, Proof $desiredProof, Volume $currentVolume): Volume
参数
  • 酒精度 $currentProof - 现有酒精度
  • 酒精度 $desiredProof - 期望的酒精度
  • 体积 $currentVolume - 现有体积
返回
  • 体积 - 需要添加到酒精中的水体积

蒸馏酒精体积

蒸馏酒精体积是一种根据洗液的酒精体积百分比和蒸馏效率计算蒸馏酒精体积的计算。

Spirit::distilledAlcoholVolume(Volume $volume, Distillate $wash, float $stillEfficiencyPercent): Volume
参数
  • 体积 $volume - 洗液体积
  • 蒸馏 $wash - 洗液的蒸馏物
  • float $stillEfficiencyPercent - 蒸馏效率百分比
返回
  • 体积 - 蒸馏酒精体积

蒸馏后剩余水量

蒸馏后剩余水量是一种计算蒸馏后剩余水体积的计算。

Spirit::distilledRemainingWaterVolume(Volume $volume, Distillate $wash, float $stillEfficiencyPercent): Volume
参数
  • 体积 $volume - 洗液体积
  • 蒸馏 $wash - 洗液的蒸馏物
  • float $stillEfficiencyPercent - 蒸馏效率百分比
返回
  • 体积 - 剩余水体积

此类将计算与水相关的计算。

百万分之几 (PPM)

百万分之几 (PPM) 是一种计算溶液中某物质含量的计算。

Water::partsPerMillion(Weight $substance, Volume $volume): float
参数
  • 重量 $substance - 物质重量
  • Volume $volume - 水的体积
返回
  • float - 百万分之几 (PPM) 值

蒸发体积

蒸发体积是确定基于蒸发率和时间的蒸发体积。

Water::boilOffVolume(Boil $boilRate, Time $time): Volume
参数
  • 蒸发 $boilRate - 系统的蒸发率
  • 时间 $time - 蒸发时间
返回
  • 体积 - 已蒸发的体积

煮沸后体积

根据预煮沸体积、蒸发率和时间确定煮沸后的溶液体积。

Water::boilOffVolume(Volume postBoilVolume, Boil $boilRate, Time $time): Volume
参数
  • 体积 $preBoilVolume - 预煮沸前溶液体积
  • 蒸发 $boilRate - 系统的蒸发率
  • 时间 $time - 蒸发时间
返回
  • 蒸发量 - 煮沸后剩余的液体体积