helvetitec / money
Fowler的Money模式的PHP实现
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- ext-bcmath: *
- ext-filter: *
- ext-json: *
- livewire/livewire: ^3.5
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
This package is auto-updated.
Last update: 2024-09-21 21:39:53 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扩展。对于特定功能,可能存在其他依赖项,例如Swap交换实现,请查阅文档以获取更多信息。
版本4需要PHP 8.0。对于旧版本的PHP,请使用此库的3.0版本。从4.5版本开始,此包将仅支持PHP自身实际接收更新的版本。如果您想使用旧版本的PHP,当然可以使用此包的旧版本。
安装
通过Composer
$ composer require moneyphp/money
功能
- JSON序列化
- 利用不同的透明计算逻辑支持大整数(在可用时,bcmath、gmp、纯PHP)
- 金钱格式化(包括intl格式化器)
- 货币仓库(包括ISO货币)
- 金钱兑换(包括Swap实现)
文档
请参阅官方文档。
测试
我们尝试通过使用phpunit来遵循TDD测试此库。
$ composer test
在Docker中运行测试
金钱需要一系列依赖项,因此您可能希望在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,没有他的贡献(代码和通过他的博客),此库不会处于现在的位置。