rmasters / units
使用转换图进行单位转换
dev-master
2013-08-30 09:54 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- mockery/mockery: dev-master@dev
- phpunit/phpunit: 3.7.*
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-23 14:39:02 UTC
README
Units是一个用PHP编写的简单的单位转换库。它旨在使用和扩展简单。
安装
可以通过Composer安装Units。将以下行添加到项目composer.json文件下的require
部分,然后运行composer update
。
"rmasters/units": "dev-master"
该包的安装版本列表可在Packagist上找到,并在发布页面上有文档说明。
使用方法
转换类可以直接实例化,也可以使用提供的门面类作为单例使用。每个Convert实例都有自己的单位和转换注册表。
一旦单位和转换已注册(见下文),值可以按以下方式转换
use Units\Facade as Units;
Units::convert('kg', 'lb', 42); // => 92.568
库中提供了一些标准转换。这些函数默认注册到门面单例实例,或者如果提供了,则注册到Convert实例。
// Defined in src/Units/conversions/
Units\register_weights(); // Metric and imperial weights
Units\register_distances(); // Metric and imperial distances
// Registering with a specific Convert instance
$convert = new Convert;
Units\register_distances($convert);
通过附加转换/单位进行扩展
Units使用图模型在单位之间进行转换。例如,下面图中的边(连接)定义了转换(要从单位A转换到B,执行X
)。这使得可以在不定义大量转换的情况下跨多个单位进行转换。
mg - g - kg
\
lb - oz
\
st
在这个图中,要将mg
转换为st
可以通过执行中间转换到g
、kg
和lb
来实现,而不需要定义特定的mg->st
转换。
要定义新的单位和转换,请使用以下代码(通过门面访问)
use \Units\Facade as Units;
// Register new units
Units::register(new Unit('Minute', 'min'));
Units::register(new Unit('Second', 'sec'));
// Record some one way conversions
Units::conversion('min', 'sec', function($min) { return $min * 60; });
Units::conversion('sec', 'min', function($sec) { return $sec / 60; });
// Passing a Unit instance automatically registers it, if not already registered
Units::conversion(new Unit('Hour', 'hr'), 'min', function($hr) { return $hr * 60; });
Units::conversion('min', 'hr', function($min) { return $min / 60; });
Units::convert('min', 'hr', 90); // => 1.5