ocramius/deprecated-money

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

PHP 实现Fowler的Money模式

3.99.99 2021-04-26 17:37 UTC

README

Latest Version GitHub Workflow Status Total Downloads

Email

Money PHP

PHP 库,使处理货币更加安全、简单和有趣!

"如果我每次看到有人用 FLOAT 存储货币,我就有 $999.997634" -- Bill Karwin

简而言之:你不应该用浮点数表示货币值。 wherever 你需要表示货币,请使用此 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 查找

要求

PHP 5.6+. 除了这个之外,此库没有其他外部要求。MoneyPHP 不会为那些不被语言本身支持的 PHP 版本提供任何支持。可能会有一些特定功能的额外依赖,例如 Swap 交换实现,请查看文档获取更多信息。

安装

通过 Composer

$ composer require moneyphp/money

特性

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

文档

请参阅 官方文档

测试

我们尝试遵循 BDD 和 TDD,因此我们使用 phpspecphpunit 测试此库。

$ 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)。请参阅许可证文件获取更多信息。

致谢

这个库深受Martin Fowler的Money模式的启发。特别感谢Mathias Verraes,没有他的贡献,包括代码和他在博客上的分享,这个库不可能达到现在的水平。