2016-02-03 31 views
0

我遇到了很大的困难,在尝试找到两天的答案之后,我需要一些帮助。PHP使用货币和单位

在我的产品数据库中,我正在使用货币。我想以美分来存储所有的产品价格。在此之前一切都很好,因为我也在与单位合作。我的产品包括杂货。因此,举例来说,我有以下的产品,我可以选择:

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

上述产品的单位通常是在数量,即可获得1瓶可乐,或两个,等等。

在旁边,我有像鸡肉或牛排的产品。它们以盎司,磅,石头等等来衡量。我想存储每种产品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以显示正确的欧元。

所以,很高兴有人明白我的问题在这里和任何指针在正确的方向来帮助我找到我的答案将不胜感激。

+0

这听起来像你正在寻求代码改进。您可能对我们的Code Review站点感兴趣:http://codereview.stackexchange。com/ – Litty

回答

1

不知道我在这里理解你的逻辑,但听起来你可以通过使用经过深思熟虑的面向对象编程(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 
    } 
} 
+0

我看到你要去的地方,我正在使用laravel,所以这实际上可能是需要考虑的事情,因为它可能不像我想象的那么简单:) – Hardist

+0

它其实很简单 - 你的'产品类将扩展'Illuminate \ Database \ Eloquent \ Model' - 然后您将得到所有的Eloquent善良,加上您自己的特定业务逻辑的实现。 – swatkins

+0

是的,我很清楚这一点:)只需要在正确的方向推动,实际上现在我想到了它,也许我可以使用getPriceAttriute的东西。 – Hardist