Open Monograph Press  3.3.0
CurrencyPair.php
1 <?php
2 
3 namespace Money;
4 
12 final class CurrencyPair implements \JsonSerializable
13 {
19  private $baseCurrency;
20 
26  private $counterCurrency;
27 
31  private $conversionRatio;
32 
40  public function __construct(Currency $baseCurrency, Currency $counterCurrency, $conversionRatio)
41  {
42  if (!is_numeric($conversionRatio)) {
43  throw new \InvalidArgumentException('Conversion ratio must be numeric');
44  }
45 
46  $this->counterCurrency = $counterCurrency;
47  $this->baseCurrency = $baseCurrency;
48  $this->conversionRatio = (float) $conversionRatio;
49  }
50 
60  public static function createFromIso($iso)
61  {
62  $currency = '([A-Z]{2,3})';
63  $ratio = "([0-9]*\.?[0-9]+)"; // @see http://www.regular-expressions.info/floatingpoint.html
64  $pattern = '#'.$currency.'/'.$currency.' '.$ratio.'#';
65 
66  $matches = [];
67 
68  if (!preg_match($pattern, $iso, $matches)) {
69  throw new \InvalidArgumentException(
70  sprintf(
71  'Cannot create currency pair from ISO string "%s", format of string is invalid',
72  $iso
73  )
74  );
75  }
76 
77  return new self(new Currency($matches[1]), new Currency($matches[2]), $matches[3]);
78  }
79 
85  public function getCounterCurrency()
86  {
87  return $this->counterCurrency;
88  }
89 
95  public function getBaseCurrency()
96  {
97  return $this->baseCurrency;
98  }
99 
105  public function getConversionRatio()
106  {
107  return $this->conversionRatio;
108  }
109 
117  public function equals(CurrencyPair $other)
118  {
119  return
120  $this->baseCurrency->equals($other->baseCurrency)
121  && $this->counterCurrency->equals($other->counterCurrency)
122  && $this->conversionRatio === $other->conversionRatio
123  ;
124  }
125 
131  public function jsonSerialize()
132  {
133  return [
134  'baseCurrency' => $this->baseCurrency,
135  'counterCurrency' => $this->counterCurrency,
136  'ratio' => $this->conversionRatio,
137  ];
138  }
139 }
Money\CurrencyPair\getBaseCurrency
getBaseCurrency()
Definition: CurrencyPair.php:104
Money
Money\CurrencyPair
Definition: CurrencyPair.php:12
Money\CurrencyPair\__construct
__construct(Currency $baseCurrency, Currency $counterCurrency, $conversionRatio)
Definition: CurrencyPair.php:49
Money\CurrencyPair\getCounterCurrency
getCounterCurrency()
Definition: CurrencyPair.php:94
Money\CurrencyPair\jsonSerialize
jsonSerialize()
Definition: CurrencyPair.php:140
Money\Currency
Definition: vendor/moneyphp/money/src/Currency.php:14
Money\CurrencyPair\getConversionRatio
getConversionRatio()
Definition: CurrencyPair.php:114
Money\CurrencyPair\equals
equals(CurrencyPair $other)
Definition: CurrencyPair.php:126
Money\CurrencyPair\createFromIso
static createFromIso($iso)
Definition: CurrencyPair.php:69