此包已被弃用且不再维护。作者建议使用 moneyphp/money 包。

Fowler的Money模式的PHP实现

安装数: 1,947,912

依赖者: 28

建议者: 1

安全: 0

星标: 4,579

关注者: 91

分支: 439

开放问题: 6

v4.5.0 2024-02-15 19:47 UTC

README

Latest Version GitHub Workflow Status Total Downloads

Email

Money PHP

PHP库,使金钱操作更安全、更简单、更有趣!

"如果每当我看到有人使用FLOAT来存储货币,我就有一分钱,我会拥有999.997634美元" -- Bill Karwin

简而言之:你不应该用浮点数来表示货币值。无论何时需要表示金钱,请使用这个Money值对象。自3.0版本起,此库内部使用字符串以支持无限整数。

<?php

use Money\Money;

$fiveEur = Money::EUR(500);
$tenEur = $fiveEur->add($fiveEur);

list($part1, $part2, $part3) = $tenEur->allocate([1, 1, 1]);
assert($part1->equals(Money::EUR(334)));
assert($part2->equals(Money::EUR(333)));
assert($part3->equals(Money::EUR(333)));

文档可在 http://moneyphp.org 查找

需求

此库需要 BCMath PHP 扩展。可能还有其他特定功能的依赖项,例如Swap交易实现,请查阅文档以获取更多信息。

版本4需要PHP 8.0。对于旧版本的PHP,请使用此库的版本3。从版本4.5开始,此包将仅支持PHP自身实际更新的PHP版本。如果您想使用旧版本的PHP版本,当然可以使用此包的旧版本。

安装

通过Composer

$ composer require moneyphp/money

功能

  • JSON序列化
  • 大整数支持,利用不同的透明计算逻辑(bcmath、gmp、普通PHP)
  • 金钱格式化(包括intl格式化器)
  • 货币存储库(包括ISO货币)
  • 金钱兑换(包括Swap实现)

文档

请参阅 官方文档

测试

我们尝试通过使用 phpunit 来遵循TDD测试此库。

$ composer test

在Docker中运行测试

Money需要一系列依赖项,因此您可能希望在Docker中运行它。

首先,在本地构建镜像

$ docker build -t moneyphp .

然后运行测试

$ docker run --rm -it -v $PWD:/app -w /app moneyphp vendor/bin/phpunit --exclude-group segmentation

贡献

我们非常希望看到您帮助我们使这个库变得更好。请注意,我们不在类名中使用后缀和前缀,因此不是 CurrenciesInterface,而是 Currencies。除此之外,Style CI将帮助您使用与我们相同的代码风格。在创建PR时请提供测试,在提交问题时请提供清晰的错误描述。

安全

如果您发现任何安全相关的问题,请通过 team@moneyphp.org 联系我们。

许可证

MIT许可证(MIT)。有关更多信息,请参阅 许可证文件

致谢

这个库深受 马丁·福勒的Money模式 启发。特别感谢 马蒂亚斯·维尔莱斯,没有他的贡献,无论是代码上还是在他的 博客 上,这个库就不会达到现在的水平。