Get currency rates from ČNB in PHP

<?php
namespace testomato\invoice;

/**
 * Get currency rates from ČNB in PHP
 *
 * @author Roman Ožana <roman@ozana.cz>
 */
class ExchangeRates {

  const URL = 'http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=';

  private static $rates = [];

  public function getRatesList(\DateTime $date = null) {
    $date = $date ?: new \DateTime();;

    if (!array_key_exists($key = $date->format('c'), self::$rates)) {

      $data = file_get_contents(
        self::URL . $date->format('d.m.Y'), null, stream_context_create(['http' => ['timeout' => 10]])
      );

      preg_match_all('/([\V]+)\|([\V]+)\|([\d]+)\|([A-Z]+)\|([\d]+),?([\d]*)/mi', $data, $matches, PREG_SET_ORDER);

      foreach ($matches as $m) {
        self::$rates[$key][$m[4]] = (object)[
          'country' => $m[1],
          'currency' => $m[2],
          'code' => $m[4],
          'amount' => intval($m[3]),
          'rate' => floatval($m[5] . '.' . $m[6]),
        ];
      }
    }

    return self::$rates[$key];
  }

  public function toCZK($amount, $code = 'USD', \DateTime $date = null) {
    $currency = self::getRatesList($date)[$code];
    return floatval($amount * $currency->rate / $currency->amount);
  }

}

#PHP