GitPedia

Money

PHP implementation of Fowler's Money pattern.

From moneyphp·Updated June 24, 2026·View on GitHub·

PHP library to make working with money safer, easier, and fun! The project is written primarily in PHP, distributed under the MIT License license, first published in 2011. It has gained significant community traction with 4,848 stars and 444 forks on GitHub. Key topics include: currency, currency-converter, currency-exchange-rates, fowler-money-pattern, money.

Latest release: v4.9.0

Money

Latest Version
GitHub Workflow Status
Total Downloads

Email

Money PHP

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

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
in order to support unlimited integers.

php
<?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)));

The documentation is available at http://moneyphp.org

Requirements

This library requires the BCMath PHP extension. 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.
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 implementation)

Documentation

Please see the official documentation.

Testing

We try to follow TDD by using phpunit 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 team@moneyphp.org.

License

The MIT License (MIT). Please see License File for more information.

Acknowledgements

This library is heavily inspired by Martin Fowler's Money pattern.
A special remark goes to Mathias Verraes, without his contributions,
in code and via his blog, this library would not be where it stands now.

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from moneyphp/money via the GitHub API.Last fetched: 6/26/2026