leaphly / price
v1.0.0-alpha2
2014-09-01 23:27 UTC
Requires
- mathiasverraes/money: dev-master
Requires (Dev)
- doctrine/dbal: ~2.4
- phpunit/phpunit: ~4
This package is auto-updated.
Last update: 2024-09-18 22:51:17 UTC
README
价格是指产品在不同货币中的金额。
In Dollar a t-shirt costs 4$,
in Eur the same t-shirt costs 3€
if British Pound the cost is given by the current conversion of 0.7900
在PHP中是
$tShirtPrice = new Price( [ 'EUR' => 300, 'USD' => 400 ], ['EUR/GBP 0.7900'] // array of conversions ); echo $tShirtPrice->inEUR(); // 300 same as ->getAmount('EUR') echo $tShirtPrice->inUSD(); // 400 same as ->getAmount('USD') echo $tShirtPrice->inGBP(); // 237 same as ->getAmount('GBP')
为什么?!
- 因为在PHP中不推荐处理货币的浮点数...
- 因为最好将货币实现为值对象。
- 因为在电子商务领域,产品对于不同的货币总是*有不同的价格。
- 因为我们需要的 :).
优点
- 它帮助您处理货币。
- 它帮助您处理货币。
- 它帮助您处理多种货币,已转换或明确的。
- 它包含一些数学运算:
加法
、乘法
、除法
、减法
... - 此库扩展了 mathiasverraes/money。
- 不可变值对象。
- 附带
DoctrineType
示例
简单用法
- T恤的价格为 10€ 和 8£
构造函数
使用显式货币值的使用
$ticketPrice = new Price( [ 'EUR' => 1000, 'GBP' => 800 ] ); echo $ticketPrice->inEUR(); // return 1000 var_dump($ticketPrice->availableCurrencies()); // array with EUR, GBP
使用混合显式和转换值的使用
$ticketPrice = new Price( [ 'EUR' => 100, 'USD' => 130 ], ['EUR/GBP 0.7901'] // this is an array of conversions with the ISO standard format. ); echo $ticketPrice->inEUR(); // 100 echo $ticketPrice->inGBP(); // 79 is calculated var_dump($ticketPrice->availableCurrencies()); // array with EUR, USD, GBP
我们使用同一种语言吗?
- 这里的浓缩咖啡价格为 [2€ 或 2.3$],外带为 [1€ 或 1.2$]。
espresso
是一个产品。
here
和 take away
是上下文(仍是一个缺失的功能)。
2€
2.3$
是包含两种货币的 Price
,
1€
1.2$
是包含两种货币的 Price
,
2€ 或 2.3$ 这里,和 1€ 或 1.2$ 外带。
是一个 PriceList
(仍是一个缺失的功能)。
API(尚不稳定)
价格
public function inXYZ($currency); // ZYX is a valid currency like EUR or GBP public function getAmount($currency); public function hasAmount($currency); public function availableCurrencies(); public function equals(Price $other); public function add(Price $addend); public function subtract(Price $subtrahend); public function multiply($multiplier); public function divide($divisor); public function isZero();
示例:相加两个价格
$ticketPrice = new Price( [ 'EUR' => 100, 'USD' => 130 ], ['EUR/GBP 0.7901'] // this is an array of conversions ); $shirtPrice = new Price( [ 'EUR' => 200, 'CHF' => 300, 'GBP' => 400 ], ); // sum $sumPrice = $ticketPrice->add($shirtPrice); $sumPrice->inEUR(); // 100+200= 400 $sumPrice->inGBP(); // 79+400= 479 $sumPrice->inUSD(); // 130 $sumPrice->inCHF(); // 300
使用 \Iterator 接口
实现 \Iterator
使 Price 成为 Money 数组
$price = new Price .... foreach ($price as $money) { echo $money->getAmount() . ' in '. $money->getCurrencies(); }
使用 Money 值对象使用它
use Money\Money; use Money\CurrencyPair; $price = new Price( array( Money::EUR(5), Money::USD(10), Money::GBP(10), 'TRY' => 120 // or mixed ), [ CurrencyPair::createFromIso('USD/CHF 1.5'), ] );
注意:迭代只在显式货币上有效,不在转换货币上。
许可证 
此库采用 MIT 许可证。请参阅存储库中的完整许可证
Resources/meta/LICENSE
测试
composer.phar create-project leaphly/price ~1` bin/phpunit
关于
查看贡献者列表。
报告问题或功能请求
问题和功能请求在 Github issue tracker 中跟踪。
注意:此库使用 Mathias Verraes Money 的 dev
版本。