Skip to content
PHP implementation of Fowler's Money pattern.
Branch: master
Clone or download
Pull request Compare This branch is 3 commits ahead, 33 commits behind moneyphp:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc
resources
spec
src
tests
.editorconfig
.flintci.yml
.gitattributes
.gitignore
.php_cs.dist
.scrutinizer.yml
.styleci.yml
.travis.yml
CHANGELOG.md
Dockerfile
LICENSE
README.md
composer.json
hi-everyone.txt
phpspec.ci.yml
phpspec.yml.dist
phpunit.xml.dist

README.md

About this fork

This fork was made purely for purposes of practicing Git during an interactive workshop called Git Legit.

Setup instructions

NOTE: if you already have PHP installed on your machine, make sure to get composer and skip to Step 3.

Step 1: Install Docker

Install Docker for your OS. Find your OS listed in the menu on the left.

Step 2: Run the container

Check out the container from Docker Hub. Note: if you're not using bash, replace $PWD with the full path to the repository.

$ docker run --rm -it -v "$PWD":/money -w /money synon/git-legit:latest

Step 3: Get dependencies

The previous step will enter you into a shell window. Once there, run:

$ composer install

This will take about a minute.

Step 4: Run the tests

To ensure you're all set for the workshop, run the unit tests:

vendor/bin/phpunit 

Money

Latest Version Build Status Code Coverage Quality Score 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

use Money\Money;

$fiveEur = Money::EUR(500);
$tenEur = $fiveEur->add($fiveEur);

list($part1, $part2, $part3) = $tenEur->allocate(array(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

PHP 5.6+. Other than that, this library has no external requirements. MoneyPHP will not provide any support to PHP versions that are not supported by the language itself. There might be additional dependencies for specific feature, e.g. the Swap exchange implementation, check the documentation for more information.

Install

Via Composer

$ 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 BDD and TDD, as such we use both phpspec and phpunit to test this library.

$ 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:

$ docker build -t moneyphp .

Then run the tests:

$ 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.

You can’t perform that action at this time.