chippyash/currency

支持本地化货币

5.0.2 2020-10-19 05:25 UTC

This package is auto-updated.

Last update: 2024-09-19 14:08:17 UTC


README

质量保证

PHP 7 Build Status Maintainability Test Coverage

请注意

  • 从版本 3 开始,停止了对 PHP 5.3/5.4 的开发者支持。
  • 从版本 4 开始,停止了对 PHP 5.5 的开发者支持。
  • 从版本 5 开始,停止了对 PHP <7.2 的开发者支持。

查看测试合约

是什么?

提供了 ISO-4217 当前货币的强类型实现。包括

  • 货币工厂
  • 开发工具用于创建(硬)货币类。
  • 本地化意识

使用公开可用的货币定义。

该库在GNU GPL V3 或更高版本许可下发布

为什么?

处理货币是个头疼的问题。为了正确处理,你必须翻阅大量关于地区、符号和语言名称的内容,而实际上你只需要一种简单的方式来定义货币。这个库旨在移除大量复杂性。

你可以简单地使用提供的工厂方法来创建一个货币对象,或者如果你只处理少数几种货币,可以使用实用程序将“硬”货币生成到你的项目命名空间中。

何时

该库是为了支持“简单会计”(复式记账)库而开发的。

  • 基于 PHP 整数的本地货币
  • 创建货币的工厂
  • 创建用于应用程序的“硬”(即具体)货币类的实用程序,因为工厂方法使用了一个 20k 行的 XML 货币定义文件,可能对您的需求来说太慢。
  • 从公开数据源生成货币定义文件的实用程序。

如果您想要更多,请提出建议,或者更好的是,将其分支并提供一个拉取请求。如果您想帮忙,需要将数据/symbols.html 文件重构为 xml 文件,并添加缺少的符号定义。请从 docs/missing-symbols.md 作为起点。大部分缺失的信息都可以在维基百科上找到,但需要手动转录。

查看ZF4 包获取更多包

如何

编码基础

通过类型工厂创建货币(在当前默认地区)

    use Chippyash\Currency\Factory;
    
    $gbp = Factory::create('GBP');
    //or with an initial value
    $gbp = Factory::create('GBP', 12.26);

为不同地区创建货币

    use Chippyash\Currency\Factory;

    Factory::setLocale('fr_FR');
    $euro = Factory::create('EUR');
    //or with an initial value
    $euro = Factory::create('EUR', 12.26);

直接创建货币

    use Chippyash\Currency\Currency;
    
    $value = 12.26;
    $code = 'FOO';
    $symbol = 'f';
    $foo = new Currency($value, $code, $symbol);
    
    //set the precision - and this is where using the Factory starts to 
    // win out unless of course you are creating fantasy currencies
    $precision = 3; //default precision == 2
    $foo = new Currency($value, $code, $symbol, $precision);
    //set long name
    $name = 'Extra Terrestial FooBar'; //default name is the code
    $foo = new Currency($value, $code, $symbol, $precision, $name);
    //supply a display format wrapper
    $displayFormat = 'Yak Yak %s'; //default wrapper is '%s'
    $foo = new Currency($value, $code, $symbol, $precision, $name, $displayFormat);

以任何方式创建的货币都作为整数使用。还提供了一个额外的

  • display()

display()返回根据为货币设置的地区格式化的货币值,例如创建

    Factory::setLocale('en_GB');
    $gbp = Factory::create('GBP', 1200.26);
    echo $gbp->display();

将显示

£1,200.26

    Factory::setLocale('fr_FR');
    $gbp = Factory::create('GBP', 1200.26);
    echo $gbp->display();

将显示

1 200,26 £

在两种情况下,$gbp->getValue()将返回 120026,即整数。

如果您需要根据其精度降级的值作为浮点数,请使用getAsFloat()

如上所述,货币类基于整数。这是因为整数数学比浮点数数学更准确。该类知道如何使用精度参数在 int/float 之间进行转换,因此可以保持长期准确性。

您可以通过set()方法使用整数值设置其值,或者通过setAsFloat()方法使用浮点值来设置,该值将使用货币的精度值转换为内部整数值。例如,假设精度为2,则

    $curr->set(2000);
    //is same as 
    $curr->setAsFloat(20.00);

请注意,神奇的__toString()方法将返回字符串化的整数值。使用display()方法进行地区感知的货币显示。

生成您自己的应用程序硬货币

假设您的应用程序仅对使用AUD、GBP和USD感兴趣。从处理的角度来看,不断查询currencies.xml文件,尽管它已优化,但仍很大,并且可能是一个昂贵的进程。

提供了一个实用工具,允许您将“硬”货币类生成到磁盘。您需要通过Composer安装具有开发要求的库(Composer的默认设置)。实用工具位于bin/generate-currency-class.php。

参数(按使用顺序)是

  • code: ISO4217货币代码
  • namespace:您的应用程序的命名空间。转义'\', 使用两个反斜杠'\\'
  • destDir:写入代码的目标目录。
  • locale: [可选]如果未指定,则使用您的当前地区(locale_get_default)

假设我们的当前地区是我们所需的地域,然后我们可以运行程序3次来生成类

bin/generate-currency-class.php aud MyApp\\Currency /home/foo/Projects/MyApp/Currency
bin/generate-currency-class.php gbp MyApp\\Currency /home/foo/Projects/MyApp/Currency
bin/generate-currency-class.php usd MyApp\\Currency /home/foo/Projects/MyApp/Currency

假设我们还想在法国显示这些货币。我们可以生成如下

bin/generate-currency-class.php aud MyApp\\Currency\\Fr /home/foo/Projects/MyApp/Currency/Fr fr_FR
bin/generate-currency-class.php gbp MyApp\\Currency\\Fr /home/foo/Projects/MyApp/Currency/Fr fr_FR
bin/generate-currency-class.php usd MyApp\\Currency\\Fr /home/foo/Projects/MyApp/Currency/Fr fr_FR

在任何情况下,您将在目标目录中找到三个类

  • AUD.php
  • GBP.php
  • USD.php

更改库

  1. 分支它
  2. 编写测试
  3. 修改它
  4. 发起拉取请求

发现了一个您无法解决的错误吗?

  1. 分支它
  2. 编写测试
  3. 发起拉取请求

注意。在您的拉取请求之前,确保您已经rebase到HEAD

或者 - 提出一个问题票据。

修改货币数据集

如前所述,我们在数据集中缺少一些符号数据(请参阅docs/missing-symbols.md)。如果您更新了data/目录中的任何文件,您需要运行bin/create-currency-data.php脚本来重新生成src/Chippyash/Currency/currencies.xml文件。

然后运行src/Chippyash/Currency/currency-type-xsd.xsl对生成的currencies.xml文件进行翻译,以创建src/Chippyash/Currency/currency-type.xsd。

在发起任何更改数据集的拉取请求之前,请运行这些。

请注意,CLDR没有为一些地区提供一些货币名称。如果Currency\Factory可以找到,它将默认使用基本语言翻译,或者作为后备使用英语名称。

如果找不到货币的符号,则默认使用ISO4217代码作为符号。

数据集来源

数据集来自多个地方

  • ISO4217.xml 注意 - 重命名下载的文件
  • symbols.html 注意 - 从页面抓取。如果您知道更好的来源,请告诉我。
  • cldr目录。是最新CLDR数据集的主要目录最新

在哪里?

库托管在Github。它可在Packagist.org找到

安装

安装Composer

用于生产

    "chippyash/currency": ">=4,<5"

用于开发

克隆此存储库,然后在本地存储库根目录中运行Composer以拉取依赖项

    git clone git@github.com:chippyash/Currency.git Currency
    cd Currency
    composer install

要运行测试

    cd Currency
    vendor/bin/phpunit -c test/phpunit.xml test/

许可证

此软件库在BSD 3 Clause license下发布

此软件库版权所有(c)2015,Ashley Kitson,英国

历史

V1.0.0 初次发布

V2.0.0 BC 破坏:命名空间从 chippyash\Currency 更改为 Chippyash\Currency

V2.0.1 更新开发依赖项

V2.0.2 从 coveralls 切换到 codeclimate

V2.0.3 添加包链接

V2.0.4 修复徽章链接

V2.0.5 验证 PHP 7 兼容性

V2.0.6 依赖项更新

V2.1.0 添加 currency-type.xsd 创建功能

V3.0.0 退出 PHP 5.3 和 5.4 支持

V3.0.1 更新 composer - 由 packagist composer.json 格式更改强制

V4.0.0 BC 破坏。退出对旧 PHP 版本的支持

V4.0.1 修复与本地 get_locale 的命名空间问题

V4.1.0 获取货币精度的能力

V4.2.0 许可证从 GPL V3 更改为 BSD 3 条款

V5.0.0 移除对 chippyash/strongtype 的依赖。BC 破坏。移除对 PHP <7.2 的支持