aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/commerceguys/intl/src/Currency/Currency.php
blob: 28329795cd7a9da7b7b08545615e7376bcdf1961 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php

namespace CommerceGuys\Intl\Currency;

/**
 * Represents a currency.
 */
final class Currency
{
    /**
     * The alphanumeric currency code.
     *
     * @var string
     */
    protected $currencyCode;

    /**
     * The currency name.
     *
     * @var string
     */
    protected $name;

    /**
     * The numeric currency code.
     *
     * @var string
     */
    protected $numericCode;

    /**
     * The currency symbol.
     *
     * @var string
     */
    protected $symbol;

    /**
     * The number of fraction digits.
     *
     * @var int
     */
    protected $fractionDigits = 2;

    /**
     * The locale (i.e. "en_US").
     *
     * @var string
     */
    protected $locale;

    /**
     * Creates a new Currency instance.
     *
     * @param array $definition The definition array.
     */
    public function __construct(array $definition)
    {
        foreach (['currency_code', 'name', 'numeric_code', 'locale'] as $requiredProperty) {
            if (empty($definition[$requiredProperty])) {
                throw new \InvalidArgumentException(sprintf('Missing required property "%s".', $requiredProperty));
            }
        }
        if (!isset($definition['symbol'])) {
            $definition['symbol'] = $definition['currency_code'];
        }

        $this->currencyCode = $definition['currency_code'];
        $this->name = $definition['name'];
        $this->numericCode = $definition['numeric_code'];
        $this->symbol = $definition['symbol'];
        if (isset($definition['fraction_digits'])) {
            $this->fractionDigits = $definition['fraction_digits'];
        }
        $this->locale = $definition['locale'];
    }

    /**
     * Gets the string representation of the currency.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->currencyCode;
    }

    /**
     * Gets the alphabetic currency code.
     *
     * @return string
     */
    public function getCurrencyCode()
    {
        return $this->currencyCode;
    }

    /**
     * Gets the currency name.
     *
     * This value is locale specific.
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Gets the numeric currency code.
     *
     * The numeric code has three digits, and the first one can be a zero,
     * hence the need to pass it around as a string.
     *
     * @return string
     */
    public function getNumericCode()
    {
        return $this->numericCode;
    }

    /**
     * Gets the currency symbol.
     *
     * This value is locale specific.
     *
     * @return string
     */
    public function getSymbol()
    {
        return $this->symbol;
    }

    /**
     * Gets the number of fraction digits.
     *
     * Used when rounding or formatting an amount for display.
     * Actual storage precision can be greater.
     *
     * @return int
     */
    public function getFractionDigits()
    {
        return $this->fractionDigits;
    }

    /**
     * Gets the locale.
     *
     * The currency name and symbol are locale specific.
     *
     * @return string
     */
    public function getLocale()
    {
        return $this->locale;
    }
}