leaphly/price

v1.0.0-alpha2 2014-09-01 23:27 UTC

This package is auto-updated.

Last update: 2024-09-18 22:51:17 UTC


README

Build Status Total Downloads Latest Stable Version

价格是指产品在不同货币中的金额。

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 是一个产品。

heretake 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'),
    ]
);

注意:迭代只在显式货币上有效,不在转换货币上。

许可证 License

此库采用 MIT 许可证。请参阅存储库中的完整许可证

Resources/meta/LICENSE

测试

composer.phar create-project leaphly/price ~1`
bin/phpunit

关于

查看贡献者列表。

报告问题或功能请求

问题和功能请求在 Github issue tracker 中跟踪。

注意:此库使用 Mathias Verraes Moneydev 版本。