h4kuna/exchange

v7.1.3 2024-08-29 06:09 UTC

README

Downloads this Month Latest Stable Version Coverage Status Total Downloads License

Exchange 是一个PHP脚本,用于处理货币。您可以转换价格。

这里是变更日志

框架扩展

通过 composer 安装

$ composer require h4kuna/exchange

可选包

$ composer require guzzlehttp/guzzle guzzlehttp/psr7 h4kuna/dir nette/caching

支持 PSR-6 缓存。

如何使用

通过 Exchange 对象和 ExchangeFactory 初始化。默认读取驱动为 Cnb这里还有其他选项

例如,定义自己的汇率

  • 25 CZK = 1 EUR
  • 20 CZK = 1 USD
use h4kuna\Exchange\Currency\Property;
use h4kuna\Exchange\Driver\Cnb\Day;
use h4kuna\Exchange\Exchange;
use h4kuna\Exchange\ExchangeFactory;
use h4kuna\Exchange\RatingList\CacheEntity;
use h4kuna\Exchange\RatingList\RatingList;

{ # by factory
	$exchangeFactory = new ExchangeFactory(
		from: 'eur',
		to: 'usd',
		allowedCurrencies: [
			'CZK',
			'USD',
			'eur', // lower case will be changed to upper case
		],
	);

	$exchange = $exchangeFactory->create();
}

{ # custom RatingList
	$ratingList = new RatingList(new DateTimeImmutable(), new DateTimeImmutable(), null, [
		'EUR' => new Property(1, 25.0, 'EUR'),
		'USD' => new Property(1, 20.0, 'USD'),
		'CZK' => new Property(1, 1.0, 'CZK'),
	]);
	$exchange = new Exchange('EUR', $ratingList, 'USD');
}

echo $exchange->change(100) . PHP_EOL; // EUR -> USD = 125.0

// use only upper case
echo $exchange->change(100, 'CZK') . PHP_EOL; // CZK -> USD = 5.0
echo $exchange->change(100, null, 'CZK') . PHP_EOL; // EUR -> CZK = 2500.0
echo $exchange->change(100, 'USD', 'CZK') . PHP_EOL; // USD -> CZK = 2000.0

更改驱动和日期

下载历史汇率。使用历史汇率创建 Exchange 的新实例。

use h4kuna\Exchange\RatingList;
use h4kuna\Exchange;

$exchangePast = $exchangeFactory->create(cacheEntity: new CacheEntity(new Datetime('2000-12-30'), new Day));
echo $exchangePast->change(100) . PHP_EOL;

访问和迭代器

use h4kuna\Exchange\Currency\Property;
/* @var $property Property */
$property = $exchange['EUR'];
var_dump($property);
echo PHP_EOL;

foreach ($exchange as $code => $property) {
	/* @var $property Property */
	var_dump($code, $property);
}

缓存

缓存将在一些时间后自动失效,这个时间由属性 SourceData::$refresh 定义。从这个属性开始计算生存时间。更好的做法是通过 cron 来使缓存失效。因为服务器上的一个请求不会锁定其他请求。让我们每天在缓存失效前最多运行 cron 29 分钟。

use h4kuna\Exchange\RatingList\RatingListCache;
use h4kuna\Exchange\RatingList\CacheEntity;
use h4kuna\Exchange\Driver\Cnb\Day;

/** @var RatingListCache $ratingListCache */
$ratingListCache->rebuild(new CacheEntity(null, new Day));

例如,使用 h4kuna\Exchange\Driver\Cnb\Day::$refresh 定义在 14:30 + 30 分钟缓存有效。每天运行 14:32 的 cron。