tomwright/currency-php

此包最新版本(0.0.4)的许可证信息不可用。

一个用于简化PHP中货币转换的小型包。

0.0.4 2017-10-24 11:54 UTC

This package is auto-updated.

Last update: 2024-09-15 07:10:39 UTC


README

Build Status Latest Stable Version Total Downloads Monthly Downloads Daily Downloads License

安装

composer install tomwright/currency-php

使用

CurrencyPHP 只是一个基本的包装器。它不能直接进行转换... 话虽如此... 你只需要提供给它汇率。

$rateFetcher = new MyConversionRateFetcher();
$factory = new CurrencyFactory($rateFetcher);

$gbp = $factory->create('GBP');
$usd = $factory->create('USD');

$priceInGBP = 100;
$priceInUSD = $gbp->convertTo($usd, $priceInGBP);
echo $priceInUSD; // 126

汇率抓取器

汇率抓取器是 CurrencyPHP 用于获取汇率的方式。你创建的任何汇率抓取器都应该实现 ConversionRateFetcherInterface

现有的汇率抓取器

如果你已经创建了自己的汇率抓取器并希望将其包含在此处,请提交一个拉取请求。

创建自己的

以下汇率抓取器为你提供一些固定的汇率

  • GBP to USD
  • USD to GBP
  • GBP to CAD
  • CAD to USD
class FixedRateFetcher implements ConversionRateFetcherInterface
{

    /**
     * @param Currency $from
     * @param Currency $to
     * @return float
     */
    public function getConversionRate(Currency $from, Currency $to)
    {
        $rates = [
            [
                'from' => 'GBP',
                'to' => 'USD',
                'rate' => 1.2547,
            ],
            [
                'from' => 'USD',
                'to' => 'GBP',
                'rate' => 0.7974,
            ],
            [
                'from' => 'GBP',
                'to' => 'CAD',
                'rate' => 1.6612,
            ],
            [
                'from' => 'CAD',
                'to' => 'USD',
                'rate' => 0.7539,
            ],
        ];

        $result = null;

        foreach ($rates as $rate) {
            if ($rate['from'] === $from->getCurrencyCode() && $rate['to'] === $to->getCurrencyCode()) {
                $result = $rate['rate'];
            }
        }
        return $result;
    }
}

处理未知汇率

单向汇率

上面的汇率抓取器具有GBP to USD和USD to GBP的汇率,这效果很好... 但你也会注意到它有CAD to USD,但没有USD to CAD的汇率。已经实现了某些逻辑,这样你只需要存储单向汇率,如果需要的话它会自动反转汇率。

由于这个逻辑,你可以使用上面的汇率抓取器进行USD to CAD的转换而不会出现任何问题。上面可以处理的完整转换列表如下

  • GBP to USD
  • USD to GBP
  • GBP to CAD
  • CAD to GBP
  • CAD to USD
  • USD to CAD

缺失的汇率

如果两种货币之间没有任何汇率,将会抛出一个 UnhandledConversionRate 异常。