PHP 使用货币和单位

PHP working with currencies and units

我在做一些非常简单的事情时遇到了很大的困难,在尝试了两天找到答案后,我需要一些帮助。

在我的产品数据库中,我使用的是货币。我想以美分存储所有产品价格。到目前为止一切都很好,因为我也在使用单元。我的产品包括杂货。因此,例如,我可以 select 来自以下产品:

- Bottle of Coca Cola
- Can of Beer
- Pack of Milk
.. and so on

以上产品的单位通常是数字,你可以得到一瓶可乐,或者两瓶,依此类推。

除此之外,我还有鸡肉或牛排等产品。它们以盎司、磅、英石等为单位进行测量。我想存储每个产品1克的价格。

现在,我可以在我的数据库中添加一个名为 units 的字段,并且只需为每个产品添加一个单位。例如,对于可乐瓶,我可以添加一个名为 bottle 或简称为 piece 的单位。至于鸡肉、牛排,我可以说 gram。或者我可以使用数值,对于瓶子我只使用 1,对于克,可能是 1000 代表一公斤,或者 500 代表磅。

然后,为了进行一些计算,我可以简单地为每个产品在显示数据时这样做:

$total_price = $product->price * product->unit * product->amount / 100

金额代表输入的金额,比如我要两瓶可乐,我输入的金额是2。或者,我要700克鸡肉,我直接输入700。它确实有效,我猜。但是我就是觉得不太对,感觉应该有更好的方法来做。

另一个问题是,当显示每个产品的所有价格时。我当然不想以美分显示它们,而是以欧元显示,所以我只是将 price per piece 除以 100,然后显示该价格。因此,例如,一瓶可乐售价 2 欧元,然后在我的数据库中,一瓶可乐的 price 字段为 200 (cents),在检索价格并显示时,我将其除以 100 为显示正确的 2 欧元。

但是对于鸡肉、牛排等,我做不到。例如,我首先需要计算从 1 克到 1000 克的价格,然后再次将该价格除以 100 以显示正确的欧元。

所以,希望有人能理解我的问题,如果能提供正确方向的帮助我找到答案,我们将不胜感激。

不确定我是否理解您的逻辑,但听起来您可以通过使用深思熟虑的面向对象编程 (OOP) 来解决很多问题。从基础 Product 开始 - 并用 WeightedProductPackagedProduct 扩展它。然后在 Product 中实现您的通用逻辑,并在每个相应的扩展 类(WeightedProductPackagedProduct)中实现您的特定逻辑。

class Product {
    public function __construct () {}
}

class WeightedProduct extends Product {
    $unit = 'piece';
    public function __construct () {
        parent::__construct();
    }
    protected function getTotal () {
        // return the total based on WeightedProducts
    }
}

class PackagedProduct extends Product {
    $unit = 'gram';
    public function __construct () {
        parent::__construct();
    }
    protected function getTotal () {
        // return the total based on PackagedProducts
    }
}