h4kuna / exchange
货币之间的兑换。
v7.1.3
2024-08-29 06:09 UTC
Requires
- php: >=8.0
- h4kuna/critical-cache: ^v1.0
- malkusch/lock: ^2.2
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.0 || ^2.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.5
- guzzlehttp/psr7: ^2.4
- h4kuna/dir: ^0.1.2
- mockery/mockery: ^1.6
- nette/caching: ^3.2
- nette/tester: ^2.5
- phpstan/phpstan: ^1.10
- phpstan/phpstan-deprecation-rules: ^1.1.3
- phpstan/phpstan-strict-rules: ^1.5
- tracy/tracy: ^2.10
Suggests
- ext-simplexml: If you want to use h4kuna\Exchange\Driver\Ecb or h4kuna\Exchange\Driver\RB.
- guzzlehttp/guzzle: As default implementation for PSR standards.
- guzzlehttp/psr7: Minimum ^2.4 for guzzle.
- h4kuna/dir: If you want to use build-in factory.
- nette/caching: If you have not own PSR-6 implementation.
- dev-master
- v7.1.3
- v7.1.2
- v7.1.1
- v7.1.0
- v7.0.10
- v7.0.9
- v7.0.8
- v7.0.7
- v7.0.6
- v7.0.5
- v7.0.4
- v7.0.3
- v7.0.2
- v7.0.1
- v7.0.0
- v6.0.5
- v6.0.4
- v6.0.3
- v6.0.2
- v6.0.1
- v6.0.0
- v5.0.2
- v5.0.1
- v5.0.0
- v4.2.2
- v4.2.1
- v4.2.0
- v4.1.0
- v4.0.7
- v4.0.6
- v4.0.5
- v4.0.4
- v4.0.3
- v4.0.2
- v4.0.1
- v3.3.4
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- v3.2.0
- v3.1.3
- v3.1.2
- v3.1.1
- v3.1.0
This package is auto-updated.
Last update: 2024-09-05 07:25:04 UTC
README
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。