chippyash / currency
支持本地化货币
Requires
- php: >=7.2
- ext-dom: *
- ext-intl: *
- ext-simplexml: *
- ext-xml: *
Requires (Dev)
- chippyash/builderpattern: >=3,<4
- mikey179/vfsstream: v1.6.8
- phpunit/phpunit: ~8.5
- symplify/easy-coding-standard: ^6.1
README
质量保证
请注意
- 从版本 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
更改库
- 分支它
- 编写测试
- 修改它
- 发起拉取请求
发现了一个您无法解决的错误吗?
- 分支它
- 编写测试
- 发起拉取请求
注意。在您的拉取请求之前,确保您已经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 的支持