Open Journal Systems  3.3.0
BitcoinMoneyParser.php
1 <?php
2 
3 namespace Money\Parser;
4 
8 use Money\Money;
10 
16 final class BitcoinMoneyParser implements MoneyParser
17 {
21  private $fractionDigits;
22 
26  public function __construct($fractionDigits)
27  {
28  $this->fractionDigits = $fractionDigits;
29  }
30 
34  public function parse($money, $forceCurrency = null)
35  {
36  if (is_string($money) === false) {
37  throw new ParserException('Formatted raw money should be string, e.g. $1.00');
38  }
39 
40  if (strpos($money, BitcoinCurrencies::SYMBOL) === false) {
41  throw new ParserException('Value cannot be parsed as Bitcoin');
42  }
43 
44  if ($forceCurrency === null) {
45  $forceCurrency = new Currency(BitcoinCurrencies::CODE);
46  }
47 
48  /*
49  * This conversion is only required whilst currency can be either a string or a
50  * Currency object.
51  */
52  $currency = $forceCurrency;
53  if (!$currency instanceof Currency) {
54  @trigger_error('Passing a currency as string is deprecated since 3.1 and will be removed in 4.0. Please pass a '.Currency::class.' instance instead.', E_USER_DEPRECATED);
55  $currency = new Currency($currency);
56  }
57 
58  $decimal = str_replace(BitcoinCurrencies::SYMBOL, '', $money);
59  $decimalSeparator = strpos($decimal, '.');
60 
61  if (false !== $decimalSeparator) {
62  $decimal = rtrim($decimal, '0');
63  $lengthDecimal = strlen($decimal);
64  $decimal = str_replace('.', '', $decimal);
65  $decimal .= str_pad('', ($lengthDecimal - $decimalSeparator - $this->fractionDigits - 1) * -1, '0');
66  } else {
67  $decimal .= str_pad('', $this->fractionDigits, '0');
68  }
69 
70  if (substr($decimal, 0, 1) === '-') {
71  $decimal = '-'.ltrim(substr($decimal, 1), '0');
72  } else {
73  $decimal = ltrim($decimal, '0');
74  }
75 
76  if ('' === $decimal) {
77  $decimal = '0';
78  }
79 
80  return new Money($decimal, $currency);
81  }
82 }
Money\Parser\BitcoinMoneyParser\parse
parse($money, $forceCurrency=null)
Definition: BitcoinMoneyParser.php:37
Money\Money
Definition: Money.php:16
Money
Money\Currencies\BitcoinCurrencies\CODE
const CODE
Definition: BitcoinCurrencies.php:14
Money\Parser\BitcoinMoneyParser
Definition: BitcoinMoneyParser.php:16
Money\Currency
Definition: vendor/moneyphp/money/src/Currency.php:14
Money\Currencies\BitcoinCurrencies\SYMBOL
const SYMBOL
Definition: BitcoinCurrencies.php:16
Money\Exception\ParserException
Definition: ParserException.php:12
Money\Parser
Definition: AggregateMoneyParser.php:3
Money\MoneyParser
Definition: MoneyParser.php:10
Money\Parser\BitcoinMoneyParser\__construct
__construct($fractionDigits)
Definition: BitcoinMoneyParser.php:29
Currency
Basic class describing a currency.
Definition: Currency.inc.php:24
Money\Currencies\BitcoinCurrencies
Definition: BitcoinCurrencies.php:12