Uname: Linux peekpos.com 6.8.0-1060-aws #63~22.04.1-Ubuntu SMP Tue Jun 30 02:32:53 UTC 2026 x86_64
Software: Apache
PHP version: 8.3.25 [ PHP INFO ] PHP os: Linux
Server Ip: 47.130.192.226
Your Ip: 10.3.134.78
User: www (1001) | Group: www (1001)
Safe Mode: OFF
Disable Function:
passthru,putenv,chroot,chgrp,chown,shell_exec,popen,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv

name : CryptoCurrencies.php
<?php

declare(strict_types=1);

namespace Money\Currencies;

use ArrayIterator;
use Money\Currencies;
use Money\Currency;
use Money\Exception\UnknownCurrencyException;
use RuntimeException;
use Traversable;

use function array_keys;
use function array_map;
use function is_file;

/**
 * List of supported Crypto Currencies codes and names using Binance as resource.
 */
final class CryptoCurrencies implements Currencies
{
    /**
     * Map of known currencies indexed by code.
     *
     * @phpstan-var non-empty-array<non-empty-string, array{
     *     symbol: non-empty-string,
     *     minorUnit: non-negative-int
     * }>|null
     */
    private static array|null $currencies = null;

    public function contains(Currency $currency): bool
    {
        return isset($this->getCurrencies()[$currency->getCode()]);
    }

    public function subunitFor(Currency $currency): int
    {
        if (! $this->contains($currency)) {
            throw new UnknownCurrencyException('Cannot find ISO currency ' . $currency->getCode());
        }

        return $this->getCurrencies()[$currency->getCode()]['minorUnit'];
    }

    /**
     * @phpstan-return Traversable<int, Currency>
     */
    public function getIterator(): Traversable
    {
        return new ArrayIterator(
            array_map(
                static function ($code) {
                    return new Currency($code);
                },
                array_keys($this->getCurrencies())
            )
        );
    }

    /**
     * Returns a map of known currencies indexed by code.
     *
     * @phpstan-return non-empty-array<non-empty-string, array{
     *     symbol: non-empty-string,
     *     minorUnit: non-negative-int
     * }>
     */
    private function getCurrencies(): array
    {
        if (self::$currencies === null) {
            self::$currencies = $this->loadCurrencies();
        }

        return self::$currencies;
    }

    /**
     * @phpstan-return non-empty-array<non-empty-string, array{
     *     symbol: non-empty-string,
     *     minorUnit: non-negative-int
     * }>
     */
    private function loadCurrencies(): array
    {
        $file = __DIR__ . '/../../resources/binance.php';

        if (is_file($file)) {
            return require $file;
        }

        throw new RuntimeException('Failed to load currency ISO codes.');
    }
}
© 2026 GrazzMean