此包已被废弃,不再维护。作者建议使用 money/money 包。

无耻地移植 RubyMoney

v1.0.0 2014-04-26 14:19 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:29:29 UTC


README

无耻地移植 RubyMoney

Build Status

Money 是一个 PHP 类,允许你在应用程序中轻松处理货币,包括其值和货币。每个货币都有其相关的信息,通过单独的 Currency 类封装。

值以分的形式表示为整数,以避免浮点数舍入误差。

返回值是不可变值对象。

安装

philipbrown/money 添加到 composer.json 中作为依赖项。

{
  "require": {
    "philipbrown/money": "1.*"
  }
}

使用 composer update 更新你的包。

使用

要创建一个新的 Money 对象,你可以像通常一样实例化,或者使用 init 静态便捷方法。

// Create a new Money object representing $5 USD
$m = Money::init(500, 'USD');
$m = new Money(500, 'USD');

值存储为整数,以避免浮点数错误的问题。要访问 Money 对象的值,可以简单地请求 cents 属性。要获取对象的货币,可以请求 currency 属性。这将返回一个具有 __toString 方法的 Money\Curreny 实例。

$m->cents; // 500
$m->currency; // United States Dollar

对于处理许多不同类型的货币,相等性非常重要。你不应该能够盲目地添加两种不同的货币,而不进行某种交换过程。

$m = Money::init(500, 'USD');

$m->isSameCurrency(Money::init(500, 'GBP')); // false

值对象 是一个对象,它表示一个实体,其实际并不基于身份:即两个值对象相等,当且仅当它们具有相同的值,而不一定是相同的对象。

$one = Money::init(500, 'USD');
$two = Money::init(500, 'USD');
$three = Money::init(501, 'USD');

$one->equals($two); // true
$one->equals($three); // false

不可避免地,你需要在应用程序中添加、减去、乘以和除以货币值。

$one = Money::init(500, 'USD');
$two = Money::init(500, 'USD');
$three = $one->add($two);
$three->cents // 1000

同样,你不应该能够在没有某种交换过程的情况下向不同货币的值添加。

$one = Money::init(500, 'USD');
$two = Money::init(500, 'GBP');

$three = $one->add($two); // Money\Exception\InvalidCurrencyException

许可证

MIT 许可证 (MIT)

版权所有 (c) 2014 Philip Brown

特此授予任何获得此软件及其相关文档文件(“软件”)副本的人免费使用该软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,以及准许向软件提供方提供软件的人行使其上述权利,前提是必须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途的适用性和非侵权性保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论这些索赔、损害或其他责任是由合同、侵权或其他原因引起的,与软件或其使用或其他交易有关。