moneyphp / money
PHP 实现Fowler的Money模式
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- ext-bcmath: *
- ext-filter: *
- ext-json: *
Requires (Dev)
- ext-gmp: *
- ext-intl: *
- cache/taggable-cache: ^1.1.0
- doctrine/coding-standard: ^12.0
- doctrine/instantiator: ^1.5.0 || ^2.0
- florianv/exchanger: ^2.8.1
- florianv/swap: ^4.3.0
- moneyphp/crypto-currencies: ^1.1.0
- moneyphp/iso-currencies: ^3.4
- php-http/message: ^1.16.0
- php-http/mock-client: ^1.6.0
- phpbench/phpbench: ^1.2.5
- phpunit/phpunit: ^10.5.9
- psalm/plugin-phpunit: ^0.18.4
- psr/cache: ^1.0.1 || ^2.0 || ^3.0
- vimeo/psalm: ~5.20.0
Suggests
- ext-gmp: Calculate without integer limits
- ext-intl: Format Money objects with intl
- florianv/exchanger: Exchange rates library for PHP
- florianv/swap: Exchange rates library for PHP
- psr/cache-implementation: Used for Currency caching
- v4.5.0
- v4.4.0
- v4.3.0
- v4.2.0
- v4.1.1
- v4.1.0
- v4.0.5
- v4.0.4
- v4.0.3
- v4.0.2
- v4.0.1
- v4.0.0
- v4.0.0-beta1
- 3.x-dev
- dev-master / 3.x-dev
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- v3.2.1
- v3.2.0
- v3.1.3
- v3.1.2
- v3.1.1
- v3.1.0
- v3.0.9
- v3.0.8
- v3.0.7
- v3.0.6
- v3.0.5
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v3.0.0-beta4
- v3.0.0-beta.3
- v3.0.0-beta.2
- v3.0.0-beta
- v3.0.0-alpha
- 1.x-dev
- v1.3.0
- 1.2.1
- 1.2.0
- 1.1.0
- dev-precise-money
This package is auto-updated.
Last update: 2024-09-12 18:48:56 UTC
README
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扩展。对于特定功能,可能还有其他依赖项,例如,交换实现,请查阅文档获取更多信息。
版本4需要PHP 8.0。对于PHP的旧版本,请使用此库的版本3。从4.5版本开始,此包将只支持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时的测试,并在提交问题时提供清晰的错误描述。
安全
如果您发现任何与安全相关的问题,请通过[email protected]联系我们。
许可
MIT许可证(MIT)。有关更多信息,请参阅许可文件。
致谢
此库在很大程度上受到Martin Fowler的Money模式的启发。特别感谢Mathias Verraes,没有他的贡献(包括代码和他的博客),此库不会处于现在的位置。