PHP code example of brick / money
1. Go to this page and download the library: Download brick/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/ */
brick / money example snippets
use Brick\Money\Money;
$money = Money::of(50, 'USD'); // USD 50.00
$money = Money::of('19.9', 'USD'); // USD 19.90
$money = Money::of('123.456', 'USD'); // RoundingNecessaryException
$money = Money::of('123.456', 'USD', roundingMode: RoundingMode::Up); // USD 123.46
use Brick\Money\Money;
$money = Money::ofMinor(1234, 'USD'); // USD 12.34
use Brick\Money\Money;
$money = Money::of(50, 'USD');
echo $money->plus('4.99'); // USD 54.99
echo $money->minus(1); // USD 49.00
echo $money->multipliedBy('1.999'); // USD 99.95
echo $money->dividedBy(4); // USD 12.50
use Brick\Money\Money;
$cost = Money::of(25, 'USD');
$shipping = Money::of('4.99', 'USD');
$discount = Money::of('2.50', 'USD');
echo $cost->plus($shipping)->minus($discount); // USD 27.49
use Brick\Money\Money;
$a = Money::of(1, 'USD');
$b = Money::of(1, 'EUR');
$a->plus($b); // CurrencyMismatchException
use Brick\Money\Money;
use Brick\Math\RoundingMode;
$money = Money::of(50, 'USD');
$money->plus('0.999'); // RoundingNecessaryException
$money->plus('0.999', RoundingMode::Down); // USD 50.99
$money->minus('0.999'); // RoundingNecessaryException
$money->minus('0.999', RoundingMode::Up); // USD 49.01
$money->multipliedBy('1.2345'); // RoundingNecessaryException
$money->multipliedBy('1.2345', RoundingMode::Down); // USD 61.72
$money->dividedBy(3); // RoundingNecessaryException
$money->dividedBy(3, RoundingMode::Up); // USD 16.67
$oneEuro = Money::of(1, 'EUR');
$oneEuro->isEqualTo(Money::of(1, 'EUR')); // true
$oneEuro->isEqualTo(Money::of(2, 'EUR')); // false
$oneEuro->isEqualTo(Money::of(1, 'USD')); // CurrencyMismatchException
$oneEuro->isSameValueAs(Money::of(1, 'EUR')); // true
$oneEuro->isSameValueAs(Money::of(2, 'EUR')); // false
$oneEuro->isSameValueAs(Money::of(1, 'USD')); // false
use Brick\Money\Money;
use Brick\Money\Context\CashContext;
use Brick\Math\RoundingMode;
$money = Money::of(10, 'CHF', new CashContext(step: 5)); // CHF 10.00
$money->dividedBy(3, RoundingMode::Down); // CHF 3.30
$money->dividedBy(3, RoundingMode::Up); // CHF 3.35
use Brick\Money\Money;
use Brick\Money\Context\CustomContext;
use Brick\Math\RoundingMode;
$money = Money::of(10, 'USD', new CustomContext(scale: 4)); // USD 10.0000
$money->dividedBy(7, RoundingMode::Up); // USD 1.4286
use Brick\Money\Money;
use Brick\Money\Context\AutoContext;
$money = Money::of('1.10', 'USD', new AutoContext()); // USD 1.1
$money->multipliedBy('2.5'); // USD 2.75
$money->dividedBy(8); // USD 0.1375
use Brick\Money\Money;
use Brick\Math\RoundingMode;
$money = Money::of('9.5', 'EUR'); // EUR 9.50 (Money)
$money = $money->toRational() // EUR 19/2 (RationalMoney)
->dividedBy(3) // EUR 19/6 (RationalMoney)
->plus('17.795') // EUR 12577/600 (RationalMoney)
->multipliedBy('1.196') // EUR 3760523/150000 (RationalMoney)
->toContext($money->getContext(), RoundingMode::Down) // EUR 25.07 (Money)
...
->toContext(new CustomContext(scale: 8), RoundingMode::Up); // EUR 25.07015334
use Brick\Money\Money;
use Brick\Money\SplitMode;
$money = Money::of(100, 'USD');
[$a, $b, $c] = $money->split(3, SplitMode::ToFirst); // USD 33.34, USD 33.33, USD 33.33
$money->split(3, SplitMode::Separate); // [USD 33.33, USD 33.33, USD 33.33, USD 0.01]
use Brick\Money\Money;
use Brick\Money\AllocationMode;
$profit = Money::of('987.65', 'CHF');
// CHF 474.08, CHF 404.93, CHF 108.64
[$a, $b, $c] = $profit->allocate([48, 41, 11], AllocationMode::FloorToFirst);
use Brick\Money\Money;
use Brick\Money\AllocationMode;
use Brick\Money\Context\CashContext;
$profit = Money::of('987.65', 'CHF', new CashContext(step: 5));
// CHF 474.10, CHF 404.95, CHF 108.60
[$a, $b, $c] = $profit->allocate([48, 41, 11], AllocationMode::FloorToFirst);
use Brick\Money\Money;
use Brick\Money\MoneyBag;
$eur = Money::of('12.34', 'EUR');
$jpy = Money::of(123, 'JPY');
$moneyBag = MoneyBag::of($eur, $jpy);
// or:
$moneyBag = MoneyBag::zero()->plus($eur)->plus($jpy);
use Brick\Money\CurrencyConverter;
$exchangeRateProvider = ...; // see below
$converter = new CurrencyConverter($exchangeRateProvider);
$money = Money::of('50', 'USD');
$converter->convert($money, 'EUR', roundingMode: RoundingMode::Down);
use Brick\Money\ExchangeRateProvider\ConfigurableProvider;
$provider = ConfigurableProvider::builder()
->addExchangeRate('EUR', 'USD', '1.0987')
->addExchangeRate('USD', 'EUR', '0.9123')
->build();
use Brick\Money\ExchangeRateProvider\ConfigurableProvider;
use Brick\Money\ExchangeRateProvider\BaseCurrencyProvider;
$provider = ConfigurableProvider::builder()
->addExchangeRate('EUR', 'USD', '1.1')
->addExchangeRate('EUR', 'GBP', '0.9')
->build();
$provider = new BaseCurrencyProvider($provider, 'EUR');
$provider->getExchangeRate(Currency::of('EUR'), Currency::of('USD')); // 1.1
$provider->getExchangeRate(Currency::of('USD'), Currency::of('EUR')); // 10/11
$provider->getExchangeRate(Currency::of('GBP'), Currency::of('USD')); // 11/9
use Brick\Money\ExchangeRateProvider\PdoProvider;
$pdo = new \PDO(...);
$provider = PdoProvider::builder($pdo, 'exchange_rates', 'exchange_rate')
->setSourceCurrencyColumn('source_currency_code')
->setTargetCurrencyColumn('target_currency_code')
->build();
use Brick\Money\ExchangeRateProvider\PdoProvider;
use Brick\Money\ExchangeRateProvider\Pdo\SqlCondition;
$provider = PdoProvider::builder($pdo, 'exchange_rates', 'exchange_rate')
->setSourceCurrencyColumn('source_currency_code')
->setTargetCurrencyColumn('target_currency_code')
->bindDimension('year', fn (int $year) => new SqlCondition('year = ?', $year))
->bindDimension('month', fn (int $month) => new SqlCondition('month = ?', $month))
->build();
use Brick\Money\Currency;
$rate = $provider->getExchangeRate(
Currency::of('EUR'),
Currency::of('USD'),
['year' => 2017, 'month' => 8],
);
use Brick\Math\RoundingMode;
use Brick\Money\CurrencyConverter;
use Brick\Money\Money;
$converter = new CurrencyConverter($provider);
$converter->convert(
Money::of('10.00', 'EUR'),
'USD',
['year' => 2017, 'month' => 8],
roundingMode: RoundingMode::HalfUp,
);
$provider = PdoProvider::builder($pdo, 'exchange_rates', 'exchange_rate')
->setSourceCurrencyColumn('source_currency_code')
->setTargetCurrencyColumn('target_currency_code')
->bindDimension(
'as_of',
fn (\DateTimeInterface $date) => new SqlCondition(
'year = ? AND month = ?',
(int) $date->format('Y'),
(int) $date->format('m'),
),
)
->build();
$rate = $provider->getExchangeRate(
Currency::of('EUR'),
Currency::of('USD'),
['as_of' => new \DateTimeImmutable('2017-08-15')],
);
$provider = PdoProvider::builder($pdo, 'exchange_rates', 'exchange_rate')
->setSourceCurrencyColumn('source_currency_code')
->setTargetCurrencyColumn('target_currency_code')
->bindDimension('date', fn (string $date) => new SqlCondition('date <= ?', $date))
->orderBy('date', 'DESC')
->build();
use Brick\Money\ExchangeRateProvider\CachedProvider;
$cachedProvider = new CachedProvider($provider);
$cachedProvider = new CachedProvider(
provider: $provider,
cache: $yourPsr16Cache,
ttl: 3600, // seconds
);
$cachedProvider = new CachedProvider(
provider: $provider,
cache: $yourPsr16Cache,
dimensionObjectNormalizer: function (object $value) {
if ($value instanceof YourCustomType) {
return $value->toKey(); // string, int, float, bool accepted
}
return null; // fall back to built-in handling
},
);
use Brick\Money\ExchangeRateProvider\ChainProvider;
$provider = new ChainProvider($primaryProvider, $fallbackProvider);
public function getExchangeRate(
Currency $sourceCurrency,
Currency $targetCurrency,
array $dimensions = [],
): ?BigNumber;
use Brick\Money\Money;
use Brick\Money\MoneyComparator;
use Brick\Money\ComparisonMode\PairwiseMode;
use Brick\Money\ExchangeRateProvider\ConfigurableProvider;
$provider = ConfigurableProvider::builder()
->addExchangeRate('EUR', 'USD', '1.10')
->build();
$comparator = new MoneyComparator($provider, new PairwiseMode());
$eur = Money::of('10.00', 'EUR'); // worth USD 11.00 at this rate
$usd = Money::of('10.50', 'USD');
$comparator->compare($eur, $usd); // 1 (EUR 10.00 is worth more than USD 10.50)
$comparator->isGreater($eur, $usd); // true
$comparator->max($eur, $usd); // EUR 10.00 (the original instance, unchanged)
use Brick\Money\ComparisonMode\BaseCurrencyMode;
$comparator = new MoneyComparator($provider, new BaseCurrencyMode('USD'));
$comparator = new MoneyComparator($provider, new PairwiseMode(), ['year' => 2017, 'month' => 8]);
use Brick\Money\Currency;
use Brick\Money\Money;
$bitcoin = new Currency(
'XBT', // currency code
null, // numeric currency code, optional; set to null if unused
'Bitcoin', // currency name
8, // default scale
);
$money = Money::of('0.123', $bitcoin); // XBT 0.12300000
$money = Money::of(5000, 'USD');
echo $money->formatToLocale('en_US'); // $5,000.00
echo $money->formatToLocale('fr_FR'); // 5 000,00 $US
use Brick\Money\Money;
use Brick\Money\Formatter\MoneyNumberFormatter;
$formatter = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
$formatter->setSymbol(\NumberFormatter::CURRENCY_SYMBOL, 'US$');
$formatter->setSymbol(\NumberFormatter::MONETARY_GROUPING_SEPARATOR_SYMBOL, '·');
$formatter->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 2);
$money = Money::of(5000, 'USD');
echo (new MoneyNumberFormatter($formatter))->format($money); // US$5·000.00
$integerAmount = $money->getMinorAmount()->toInt();
Money::ofMinor($integerAmount, $currencyCode);
$decimalAmount = $money->getAmount()->toString();
Money::of($decimalAmount, $currencyCode);
$currencyCode = $money->getCurrency()->getCurrencyCode();
$numericCode = $money->getCurrency()->getNumericCode();
class Entity
{
private int $price;
private string $currencyCode;
public function getPrice() : Money
{
return Money::ofMinor($this->price, $this->currencyCode);
}
public function setPrice(Money $price) : void
{
$this->price = $price->getMinorAmount()->toInt();
$this->currencyCode = $price->getCurrency()->getCurrencyCode();
}
}