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
质量保证
请注意
- PHP 5.3/5.4版本的开发者支持自版本3开始已撤回。
- PHP 5.5版本的开发者支持自版本4开始已撤回。
- PHP <7.2版本的开发者支持自版本5开始已撤回。
请参阅测试合同
是什么?
提供ISO-4217当前货币的强类型实现。包括
- 货币工厂
- 开发工具,用于创建(硬)货币类。
- 对区域的认识
使用公开可用的货币定义。
该库在GNU GPL V3或更高版本许可下发布
为什么?
处理货币很痛苦。要正确处理,你必须翻阅大量有关区域、符号和语言名称的内容,而实际上你只是想简单地定义一种货币。这个库旨在消除一大堆复杂性。
你可以简单地使用提供的工厂方法创建货币对象,或者如果你知道你只处理一些选择的货币,可以使用实用程序将“硬”货币生成到你的项目命名空间中。
何时
该库是为支持一个“简单会计”(双重记账)库而开发的。
- 本地PHP整数货币
- 创建货币的工厂
- 创建应用程序的“硬”(即具体)货币类的实用程序,因为工厂方法使用20k行的XML货币定义文件,可能对您的要求太慢。
- 从公开数据源生成货币定义文件的实用程序。
如果您需要更多功能,请提出建议,或者最好分叉它并提供拉取请求。如果您想帮忙,需要将data/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
更改库
- 分叉它
- 编写测试
- 修改它
- 发起拉取请求
发现了一个您无法解决的错误吗?
- 分叉它
- 编写测试
- 发起拉取请求
NB。在您的拉取请求之前,请确保将您的工作分支重新基到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 NB - 重命名下载的文件
- symbols.html NB - 从页面抓取。如果您知道更好的来源,请告诉我。
- 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许可证下发布
本软件库版权所有(c)2015,Ashley Kitson,英国
历史
V1.0.0 初始发布
V2.0.0 BC Break:命名空间从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 依赖项更新
V3.1.0 添加currency-type.xsd创建功能
V3.0.0 退出对PHP 5.3和5.4的支持
V3.0.1 更新composer - 由于packagist composer.json格式变更而强制执行
V4.0.0 BC Break。撤销对旧PHP版本的支持
V4.0.1 修复与本地get_locale相关的命名空间问题
V4.1.0 获取货币精度的能力
V4.2.0 许可证从GPL V3更改为BSD 3-Clause
V5.0.0 移除对chippyash/strongtype的依赖。BC break。移除对PHP <7.2的支持