PHP全场折扣类设计思路

最近逛论坛发现有小伙伴提问到此题目在这里贴一下原题:

  • 若用户在一个全场八折的网站购买两斤香蕉丶一斤苹果丶三斤橘子,它们的价格分别为:7.99/斤丶6.89/斤丶3.99/斤,那么如何使用 PHP 程序计算此用户实际需支付金额呢?
  1. 如果题中的商城是购物类型网站时可以考虑如下封装写法思路:
<?php
//定义商城类
class shop {
//商品对象
private $goods = [];
//单例对象
private static $nav = null;

/*
 * 单列模式调用此类 
 */
public static function nav() {
if(self::$nav == null) {
self::$nav = new self();
}
return self::$nav;
}

/*
 * 构造函数
 */
public function __construct() {
//设定全场折扣
$this -> discount = 8;
}

/*
 * 商品添加
 * @param $id 商品id
 * @param $name 商品名称
 * @param $price 商品价格
 * @param $num 商品数量
 */
public function add($id, $name, $price, $num = 1) {
if(!isset($this -> goods[$id]))
$this -> goods[$id] = [
'name' => $name,
'price' => $price,
'num' => $num
];
else
$this -> goods[$id] += $num;
return $this -> goods;
}

/*
 * 计算总价
 */
public function total_price() {
foreach($this -> goods as $v) $money += ($v['price'] * $v['num']) * ($this -> discount / 10);
return $money;
}

}

$obj = shop::nav();
$obj -> add(1, '香蕉', 7.99, 2);
$obj -> add(2, '苹果', 6.89);
$obj -> add(3, '橘子', 3.99, 3);
echo '总价:' . $obj -> total_price();

这里只是简单的以题目为例做下思路,可以根据自身需要完善其他功能,例如增加减少物品数量,某ID的商品不参与折扣等等。

  1. 如果题意只是希望简单的计算那么可以直接这样:
echo '总价:' . ((7.99 * 2) + 6.89 + (3.99 * 3)) * 0.8;
发布了3 篇原创文章 · 获赞 0 · 访问量 776

猜你喜欢

转载自blog.csdn.net/xuanziran/article/details/104888776