commitm / money
Money. Money pattern's Implementation
Installs: 18
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:project
Requires
- php: ^8.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.66
- phpunit/phpunit: 11.0.*
- squizlabs/php_codesniffer: *
- symfony/finder: ^7.2
- symfony/var-dumper: v7.0.*
README
PHP Money pattern's implementation, Martin Fowler Money pattern by Martin Fowler.
Usage
composer require commitm/money
$amount = 100; // 100 = 100 cents = 1 $ $currency = 'USD'; $money = new \Money\Money(new \Money\Amount\Amount($amount), new \Money\Currency\Currency($currency)); // Money class is a value object $money->getAmount() // return value $code = $money->getCurrency()->getCode(); $money2 = clone $money; // values $money2 hava the same values like $money, but different objects' references // comparing $isEqual = $money->equals($money2); // true $isCurrenciesTheSame = $money->identicalCurrencies($money2); // true // math: add, sub, percentage. Value object Money class create a new object $addMoney = $money->add($money2); // $addMoney->getAmount() === 200 $subMoney = $money->sub($money2); // $subMoney->getAmount() === 0 $sub2Money = $money->sub($money2, $money2); // $sub2Money->getAmount() === -100 // library provide possibility a negative amount $halfMoney = $money->percent(0.5); // $halfMoney->getAmount() === 50
You can override Amount or Currency class with own restricts or validations, make new class and implementin AmountInterface
class Amount2 implements \Money\Amount\AmountInterface { public function __construct(int $value) { // validation or something else } public function getAmount(): string{ return ... } } $money = new \Money\Money(new Amount2(100), new \Money\Currency\Currency('USD'));