Currencies ========== Applications often support a certain subset of currencies. Those currencies come from different data sources. Therefore you can implement the `Currencies` interface. The interface provides a list of available currencies and the subunit for the currency. Money comes with the following implementations out of the box: ISOCurrencies ------------- As it's name says, the ISO currencies implementation provides all available ISO4217 currencies. It uses the official ISO 4217 Maintenance Agency as source for the data. .. code-block:: php use Money\Currencies\ISOCurrencies; use Money\Currency; $currencies = new ISOCurrencies(); foreach ($currencies as $currency) { echo $currency->getCode(); // prints an available currency code within the repository } $currencies->contains(new Currency('USD')); // returns boolean whether USD is available in this repository $currencies->subunitFor(new Currency('USD')); // returns the subunit for the dollar (2) BitcoinCurrencies ----------------- The Bitcoin currencies provides a single currency: the Bitcoin. It uses XBT as its code and has a subunit of 8. .. code-block:: php use Money\Currencies\BitcoinCurrencies; use Money\Currency; $currencies = new BitcoinCurrencies(); foreach ($currencies as $currency) { echo $currency->getCode(); // prints XBT } $currencies->contains(new Currency('XBT')); // returns boolean whether XBT is available in this repository (true) $currencies->contains(new Currency('USD')); // returns boolean whether USD is available in this repository (false) $currencies->subunitFor(new Currency('XBT')); // returns the subunit for the Bitcoin (8) CurrencyList ------------ The CurrencyList class provides a way for a developer to create a custom currency repository. The class accepts an array of currency code and minor unit pairs. In case of an invalid array an exception is thrown. .. code-block:: php use Money\Currencies\CurrencyList; use Money\Currency; $currencies = new CurrencyList([ 'MY1' => 2, ]); foreach ($currencies as $currency) { echo $currency->getCode(); // prints MY1 } $currencies->contains(new Currency('MY1')); // returns boolean whether MY1 is available in this repository (true) $currencies->contains(new Currency('USD')); // returns boolean whether USD is available in this repository (false) $currencies->subunitFor(new Currency('MY1')); // returns the subunit for the currency MY1 (2) Aggregate Currencies -------------------- This formatter collects multiple currencies. .. code-block:: php use Money\Currency; use Money\Currencies\AggregateCurrencies; use Money\Currencies\BitcoinCurrencies; use Money\Currencies\ISOCurrencies; $currencies = new AggregateCurrencies([ new BitcoinCurrencies(), new ISOCurrencies() ]); foreach ($currencies as $currency) { echo $currency->getCode(); // prints XBT or any ISO currency code } $currencies->contains(new Currency('XBT')); // returns boolean whether XBT is available in this repository (true) $currencies->contains(new Currency('USD')); // returns boolean whether USD is available in this repository (true) $currencies->subunitFor(new Currency('XBT')); // returns the subunit for the Bitcoin (8) This is very useful if you want to support multiple currencies data sources.