Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/moneyphp/money
PHP implementation of Fowler's Money pattern.
https://github.com/moneyphp/money
currency currency-converter currency-exchange-rates fowler-money-pattern money php
Last synced: 3 days ago
JSON representation
PHP implementation of Fowler's Money pattern.
- Host: GitHub
- URL: https://github.com/moneyphp/money
- Owner: moneyphp
- License: mit
- Created: 2011-03-29T22:58:09.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2024-11-25T08:41:53.000Z (17 days ago)
- Last Synced: 2024-12-02T11:06:45.711Z (10 days ago)
- Topics: currency, currency-converter, currency-exchange-rates, fowler-money-pattern, money, php
- Language: PHP
- Homepage: http://moneyphp.org
- Size: 1.3 MB
- Stars: 4,645
- Watchers: 91
- Forks: 442
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome - moneyphp/money - PHP implementation of Fowler's Money pattern. (PHP)
- awesome-php - Money - A PHP implementation of Fowler's money pattern. (Table of Contents / E-commerce)
- awesome-php-cn - Money - 福勒的钱的PHP实现模式. (目录 / 电子商务 E-commerce)
- awesome-projects - Money - A PHP implementation of Fowler's money pattern. (PHP / E-commerce)
- php-awesome - Money - 货币处理 (类库 / 未归类)
- awesome-php - Money - A PHP implementation of Fowler's money pattern. (Table of Contents / E-commerce)
README
# Money
[![Latest Version](https://img.shields.io/github/release/moneyphp/money.svg?style=flat-square)](https://github.com/moneyphp/money/releases)
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/moneyphp/money/ci.yml?branch=master&style=flat-square)
[![Total Downloads](https://img.shields.io/packagist/dt/moneyphp/money.svg?style=flat-square)](https://packagist.org/packages/moneyphp/money)[![Email](https://img.shields.io/badge/[email protected]?style=flat-square)](mailto:[email protected])
![Money PHP](/resources/logo.png?raw=true)
PHP library to make working with money safer, easier, and fun!
> "If I had a dime for every time I've seen someone use FLOAT to store currency, I'd have $999.997634" -- [Bill Karwin](https://twitter.com/billkarwin/status/347561901460447232)
In short: You shouldn't represent monetary values by a float. Wherever
you need to represent money, use this Money value object. Since version
3.0 this library uses [strings internally](https://github.com/moneyphp/money/pull/136)
in order to support unlimited integers.```php
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)));
```The documentation is available at http://moneyphp.org
## Requirements
This library requires the [BCMath PHP extension](https://www.php.net/manual/en/book.bc.php). There might be additional dependencies for specific feature, e.g. the
Swap exchange implementation, check the documentation for more information.Version 4 requires PHP 8.0. For older version of PHP, use version 3 of this library. From version 4.5 this package
will only support [PHP versions that actually receive updates by PHP itself](https://www.php.net/supported-versions.php).
If you want to use the package with older PHP versions, you can of course use older versions of this package.## Install
Via Composer
```bash
$ composer require moneyphp/money
```## Features
- JSON Serialization
- Big integer support utilizing different, transparent calculation logic upon availability (bcmath, gmp, plain php)
- Money formatting (including intl formatter)
- Currency repositories (ISO currencies included)
- Money exchange (including [Swap](http://swap.voutzinos.org) implementation)## Documentation
Please see the [official documentation](http://moneyphp.org).
## Testing
We try to follow TDD by using [phpunit](https://phpunit.de) to test this library.
```bash
$ composer test
```### Running the tests in Docker
Money requires a set of dependencies, so you might want to run it in Docker.
First, build the image locally:
```bash
$ docker build -t moneyphp .
```Then run the tests:
```bash
$ docker run --rm -it -v $PWD:/app -w /app moneyphp vendor/bin/phpunit --exclude-group segmentation
```## Contributing
We would love to see you helping us to make this library better and better.
Please keep in mind we do not use suffixes and prefixes in class names,
so not `CurrenciesInterface`, but `Currencies`. Other than that, Style CI will help you
using the same code style as we are using. Please provide tests when creating a PR and clear descriptions of bugs when filing issues.## Security
If you discover any security related issues, please contact us at [[email protected]](mailto:[email protected]).
## License
The MIT License (MIT). Please see [License File](LICENSE) for more information.
## Acknowledgements
This library is heavily inspired by [Martin Fowler's Money pattern](http://martinfowler.com/eaaCatalog/money.html).
A special remark goes to [Mathias Verraes](https://github.com/mathiasverraes), without his contributions,
in code and via his [blog](http://verraes.net/#blog), this library would not be where it stands now.