1. Go to this page and download the library: Download onmoon/money library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
onmoon / money example snippets
namespace App\Application\Service;
use Money\Money;
class InvoiceService
{
public function calculateFee(Money $amount) : Money
{
...
}
}
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\Money;
class InvoiceAmount extends Money
{
}
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\Money;
class InvoiceFee extends Money
{
}
namespace App\Application\Service;
use App\Domain\Entity\Invoice\ValueObject\InvoiceAmount;
use App\Domain\Entity\Invoice\ValueObject\InvoiceFee;
class InvoiceService
{
public function calculateFee(InvoiceAmount $amount) : InvoiceFee
{
...
}
}
namespace Money;
final class Money implements \JsonSerializable
{
/**
* @var Currency
*/
private $currency;
...
}
use Money\Money;
use Money\Currency;
$money = new Money(100, new Currency('EUR')); // 1 Euro
$money = new Money(100.00, new Currency('EUR')); // 1 Euro
$money = new Money('100', new Currency('EUR')); // 1 Euro
$money = new Money('100.00', new Currency('EUR')); // 1 Euro
$money = new Money('100.00', new Currency('XBT')); // 0.00000100 Bitcoins
use OnMoon\Money\Money;
use OnMoon\Money\GaapMoney;
use OnMoon\Money\Bitcoin;
use OnMoon\Money\Currency;
$money = Money::create('100', Currency::create('BIF')); // 100 Burundi Francs
$money = Money::create('100.00', Currency::create('EUR')); // 100 Euros
$money = GaapMoney::create('100.000', Currency::create('IQD')); // 100 Iraqi Dinars
$money = Bitcoin::create('100.00000000', Currency::create('XBT')); // 100 Bitcoins
$money = Money::create(100, Currency::create('EUR')); // Error, invalid type
$money = Money::create(100.00, Currency::create('EUR')); // Error, invalid type
$money = Money::create('100', Currency::create('EUR')); // Error, no subunits specified
$money = Money::create('100.0', Currency::create('EUR')); // Error, not all subunits specified
$money = Money::create('100.000', Currency::create('EUR')); // Error, too many subunits specified
namespace App\Domain\Entity\Invoice\ValueObject;
use Money\Currencies;
use Money\Currencies\CurrencyList;
use OnMoon\Money\BaseMoney;
use OnMoon\Money\Money;
use OnMoon\Money\Currency;
use OnMoon\Money\Exception\CannotCreateMoney;
class InvoiceIncome extends Money
{
public static function humanReadableName() : string
{
return 'Invoice Income';
}
protected static function amountMustBeZeroOrGreater() : bool
{
return true;
}
protected static function getAllowedCurrencies() : Currencies
{
return new CurrencyList(['EUR' => 2, 'USD' => 2]);
}
protected static function validate(BaseMoney $money) : void
{
if ($money->getCurrency()->getCode() === 'EUR' &&
$money->greaterThan(Money::create('50.00', $money->getCurrency()))
) {
throw new CannotCreateMoney('Cannot exceed 50.00 for EUR currency');
}
}
}
$invoiceIncome = InvoiceIncome::create('100.00', Currency::create('RUB')); // Error: Invalid Invoice Income with amount: 100.00 and currency: RUB. Currency not allowed.
$invoiceIncome = InvoiceIncome::create('100.00', Currency::create('EUR')); // Error: Cannot exceed 50.00 for EUR currency
$invoiceIncome = InvoiceIncome::create('-100.00', Currency::create('USD')); // Error: Invalid Invoice Income with amount: -100.00 and currency: USD. Amount must be zero or greater.
$invoiceIncome = InvoiceIncome::create('100.00', Currency::create('USD')); // ok
use OnMoon\Money\Currency;
$euroCode = 'EUR';
$euro = Currency::create($euroCode);
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\Money;
class InvoiceAmount extends Money
{
}
use OnMoon\Money\Money;
use OnMoon\Money\Currency;
use App\Domain\Entity\Invoice\ValueObject\InvoiceAmount;
$money = Money::create('100.00', Currency::create('EUR')); // instance of OnMoon\Money\Money
$money = InvoiceAmount::create('100.00', Currency::create('EUR')); // instance of App\Domain\Entity\Invoice\ValueObject\InvoiceAmount
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\Money;
use OnMoon\Money\GaapMoney;
use OnMoon\Money\Currency;
class InvoiceAmount extends Money
{
}
class InvoiceFee extends GaapMoney
{
}
$money = InvoiceAmount::create('100.00', Currency::create('EUR')); // ok
$money = InvoiceAmount::create('100.000', Currency::create('BHD')); // error
$money = InvoiceFee::create('100.00', Currency::create('EUR')); // ok
$money = InvoiceFee::create('100.000', Currency::create('BHD')); // ok
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\Money;
use OnMoon\Money\Currency;
class InvoiceAmount extends Money
{
protected static function classSubunits() : int
{
return 0;
}
}
$money = InvoiceAmount::create('100', Currency::create('DJF')); // ok
$money = InvoiceAmount::create('100.00', Currency::create('EUR')); // error
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\Money;
use OnMoon\Money\Currency;
class TwoSubunitMoney extends Money
{
protected static function subUnits() : int
{
return 2;
}
}
class FourSubunitMoney extends Money
{
protected static function subUnits() : int
{
return 4;
}
}
$twoSubunitMoney = TwoSubunitMoney::create('100.00', Currency::create('EUR'));
$otherTwoSubunitMoney = TwoSubunitMoney::create('100.00', Currency::create('EUR'));
$twoSubunitMoney->add($otherTwoSubunitMoney); // ok
$fourSubunitMoney = FourSubunitMoney::create('100.00', Currency::create('EUR'));
$twoSubunitMoney->add($fourSubunitMoney); // error
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\Money;
use OnMoon\Money\Currency;
class PositiveAmountMoney extends Money
{
protected static function amountMustBeZeroOrGreater() : bool
{
return true;
}
}
$money = PositiveAmountMoney::create('0.00', Currency::create('EUR')); // ok
$money = PositiveAmountMoney::create('-0.01', Currency::create('EUR')); // error
class GreaterThanZeroAmountMoney extends Money
{
protected static function amountMustBeGreaterThanZero() : bool
{
return true;
}
}
$money = GreaterThanZeroAmountMoney::create('0.01', Currency::create('EUR')); // ok
$money = GreaterThanZeroAmountMoney::create('0.00', Currency::create('EUR')); // error
class ZeroOrLessAmountMoney extends Money
{
protected static function amountMustBeZeroOrLess() : bool
{
return true;
}
}
$money = ZeroOrLessAmountMoney::create('0.00', Currency::create('EUR')); // ok
$money = ZeroOrLessAmountMoney::create('0.01', Currency::create('EUR')); // error
class NegativeAmountMoney extends Money
{
protected static function amountMustBeLessThanZero() : bool
{
return true;
}
}
$money = NegativeAmountMoney::create('-0.01', Currency::create('EUR')); // ok
$money = NegativeAmountMoney::create('0.00', Currency::create('EUR')); // error
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\BaseMoney;
use OnMoon\Money\Exception\CannotCreateMoney;
use OnMoon\Money\Money;
use OnMoon\Money\Currency;
class ComplexValidationMoney extends Money
{
protected static function validate(BaseMoney $money) : void
{
if ($money->getCurrency()->getCode() === 'EUR' &&
$money->greaterThan(Money::create('50.00', $money->getCurrency()))
) {
throw new CannotCreateMoney('Cannot work with Euros if amount is greater than 50.00');
}
}
}
$money = ComplexValidationMoney::create('40.00', Currency::create('EUR')); // ok
$money = ComplexValidationMoney::create('51.00', Currency::create('EUR')); // error
namespace App\Domain\Entity\Invoice\ValueObject;
use Money\Currencies;
use Money\Currencies\CurrencyList;
use OnMoon\Money\BaseMoney;
use OnMoon\Money\Exception\CannotCreateMoney;
use OnMoon\Money\Money;
use OnMoon\Money\Currency;
class OnlyUsdMoney extends Money
{
protected static function getAllowedCurrencies() : Currencies
{
return new CurrencyList(['USD' => 2]);
}
}
$money = OnlyUsdMoney::create('50.00', Currency::create('USD')); // ok
$money = OnlyUsdMoney::create('50.00', Currency::create('EUR')); // error
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\Money;
use OnMoon\Money\Currency;
class MyMoney extends Money
{
protected static function amountMustBeZeroOrGreater() : bool
{
return true;
}
}
$money = MyMoney::create('100.00', Currency::create('EUR')); // instance of App\Domain\Entity\Invoice\ValueObject\MyMoney
$otherMoney = MyMoney::create('200.00', Currency::create('EUR')); // instance of App\Domain\Entity\Invoice\ValueObject\MyMoney
$sum = $money->subtract($otherMoney); // returns instance of OnMoon\Money\Money
namespace App\Domain\Entity\Transaction\ValueObject;
use OnMoon\Money\Money;
class TransactionFee extends Money
{
public static function humanReadableName() : string
{
return 'Transaction Fee';
}
}
namespace App\Domain\Entity\Invoice;
use App\Domain\Entity\Invoice\ValueObject\InvoiceIncome;
class Invoice
{
/** @var InvoiceIncome $income */
private $income;
public function __construct(InvoiceIncome $income)
{
$this->income = $income;
}
public function income() : InvoiceIncome
{
return $this->income();
}
}
namespace App\Domain\Entity\Invoice\ValueObject;
use OnMoon\Money\Money;
class InvoiceIncome extends Money
{
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.