muvon / kiss-money
Money操作逻辑的KISS实现
0.4.3
2021-07-11 12:54 UTC
Requires (Dev)
- phpunit/phpunit: ^10
README
使用KISS方式实现带有自配置货币的Money操作
简单用法
use Muvon\KISS\Money; Money::init([ 'USD' => [ 'fraction' => 2 ] ]); $Money = Money::fromAmount('0.01', 'USD'); // If we want to create from minor amount // $Money = Money::fromMinor('1', 'USD'); // Get amount var_dump($Money->getAmount()); // Get minor amount aka Value var_dump($Money->getValue());
方法
初始化
在使用Money对象之前,您需要使用您的货币配置它。
为此,只需在您的应用程序启动之前调用带有传递配置的Money::init()方法。
初始化对象的示例
use Muvon\KISS\Money; $config = [ 'USD' => [ 'fraction' => 2 ], 'EUR' => [ 'fraction' => 2 ] ]; Money::init($config);
从货币金额创建
您可以使用金额或值(称为小数金额)作为单个实例创建对象,也可以作为实例列表(数组)创建。
请看下面的示例用法,了解您如何创建对象。
$list = Money::fromAmounts(['1.01', '2.03'], 'USD'); // Dumps array of Money objects created from amounts var_dump($list); // Dumps single object from amount var_dump(Money::fromAmount('1.01', 'USD')); // You can do almost the same just from minor amount // Using method fromValue and fromValues // But passing minor amounts to them
数学操作
支持两个货币对象的操作 - 加法和减法。
示例
$one = Money::fromAmount('1.5', 'USD'); $two = Money::fromAmount('2.0', 'USD'); // Dumps "3.50" var_dump($one->add($two)); // Dumps "0.50" var_dump($two->sub($one));
您还可以使用mul和div方法进行乘法或除法。
示例
$usd = Money::fromAmount('1.5', 'USD'); // Dumps "3.00" var_dump($usd->mul('2')); // Dumps "0.75" var_dump($usd->div('2'));
转换为另一个国家
库支持根据另一个国家提供的汇率从一个国家转换到另一个国家。
要转换,只需像示例中那样调用cnv方法。
示例
$xrp = Money::fromAmount('23.00243', 'XRP'); $rate = Money::fromAmount('0.51', 'USD'); // How much for 1 XRP // Dumps "11.73" var_dump($xrp->cnv($rate));
要使转换更简单,您还可以使用两个相同货币的对象创建您的汇率。
示例
$Source = Money::fromAmount('0.5', 'USD'); $Target = Money::fromAount('10', 'USD'); // Dumps object with rate "20" var_dump(Money::rate($Source, $Target, 'XRP'));
比较操作
所有比较操作都采用类似bash的风格命名。
所有方法只有一个参数,应该传递 - 要与之比较的另一个Money对象。
示例
$one = Money::fromAmount('1.5', 'USD'); $two = Money::fromAmount('2', 'USD'); // Dumps false var_dump($one->ge($two)); // Dumps true var_dump($one->lt($two));
自我检查方法
您可以使用isPositive、isNegative、isZero等方法检查当前值。
示例
$usd = Money::fromAmount('1.5', 'USD'); // Dumps true var_dump($usd->isPositive()); // Dumps false var_dump($usd->isNegative()); // Dump false var_dump($usd->isZero());
获取当前对象的信息
您可以使用以下方法获取对象当前状态及其值。所有方法都没有参数。
作为字符串使用
您可以将对象作为字符串使用。默认情况下,它返回Money::getAmount()方法的调用。
依赖关系
此库要求您安装bcmath和gmp扩展,并且PHP版本为8+。
此库没有其他代码依赖,尽可能保持简单。
测试覆盖率
- 可以创建单个
- 可以创建多个
- 可以创建零
- 不能没有配置创建
- 添加减法操作
- 乘除法操作
- 计算汇率
- 转换为另一种货币
- 不能转换相同货币
- 结果不可变
- 比较操作
- 不能添加或减去不同货币
- 不能比较不同货币
- 是正数
- 是负数
- 是零
- 有货币
- 可以作为字符串使用