zoukankan      html  css  js  c++  java
  • 一个购物车类(session实现的且为单例模式)

    <?php
    defined("Hello")||exit("Hello deny!");
    /*
    购物车类  session 加单例模式
    功能分析
    添加商品
    删除商品
    修改商品数量
    检查商品是否存在
    某商品数量加一
    某商品数量减一
    查询购物车的商品种类
    查询购物车商品数量
    是
    查询总金额
    返回所有商品
    添加订单
    修改商品库存
    清空购物车
    */
    //defined("Hello")||exit("Hello deny!");
    class CartTool{
        private static $ins = null;
        private $items = array();
        protected function __construct(){
        }
        //获取实例
        private static function getIns(){
            if(!(self::$ins instanceof self)){
                self::$ins = new self();
                return self::$ins;
            }
        }
        //把购物车中的单例对象放到session当中
        public static function getCart(){
            //先判断购物车当中是否存在该单例 否走创建单例并且存放在购物车当中 并且返回 否则直接返回购物车
            if(!isset($_SESSION['cart'])||!($_SESSION['cart'] instanceof self)){
                $_SESSION['cart'] = self::getIns();
                return $_SESSION['cart'];
            }else{
                return $_SESSION['cart'];
            }
        }
        /*
        
        商品id 、 商品名称 、 商品价格 、 商品数量
        */
        public function addItem($id,$goods_name,$shop_price,$goods_num = 1,$goods_img){
            //判断该商品是否存在
            if($this->hasItem($id)){
                $this->modNum($id,$goods_num);
                return true;
            }else{
                //为什么这里不是直接赋值?
                $this->items[$id] = array(
                    "id"=>$id,
                    "goods_name"=>$goods_name,
                    
                    "shop_price"=>$shop_price,
                    //这里可以不需要写 在goodsModel当中取出 购物车当中的商品的详细信息
                    "goods_num"=>$goods_num,
                    "addtime"=>time(),
                    "goods_img"=>$goods_img
                );
                return true;
            }
        }
        /*修改购物车 商品id 商品修改后的数量 直接修改*/
        public function modNum($id,$num){
            //先判断购物车当中是否存在该商品 否则修改商品数量
            if(!$this->hasItem($id)){
                return false;
            }else{
                //$this->items[$goods_id]['goods_num'] = $num;
                $this->increaNum($id,$num);
            }
        }
        /*通过点击按钮修改商品数量*/
        public function increaNum($id,$num){
            if($this->hasItem($id)){
                $this->items[$id]['goods_num'] += $num;
            }
        }
        public function decreaNum($id,$num){
            //先判断商品是否存在再进行操作
            if($this->hasItem($id)){
                $this->items[$id]['goods_num'] -= $num;
            }
            //如果商品数量为0则删除该商品
            if($this->items[$id]['goods_num'] <= 0){
                $this->delItem($id);
            }
        }
        /*返回商品种类 即购物车中item的key*/
        public function countItem(){
            return array_keys($this->items);
        }
        /*总的商品个数*/
        public function getSum(){
            $sum = 0;
            foreach ($this->items as $value) {
                $sum+=$value['goods_num'];
            }
            return $sum;
        }
        /*获取商品的总价格*/
        public function getPrice(){
            if($this->countItem() == 0){
                return 0;
            }
            $sum = 0.0;
            foreach ($this->items as $value) {
                $sum+=$value['goods_num']*$value['shop_price'];
            }
            return $sum;
        }
        /*删除商品*/
        public function delItem($id){
            unset($this->items[$id]);
        }
        /*清空购物车*/
        public function clear(){
            $this->items = array();
        }
        public function getAllItem(){
            return $this->items;
        }
        /*判断商品是否存在*/
        public function hasItem($id){
            if($this->countItem() == 0){
                return 0;
            }
            return array_key_exists($id, $this->items);
        }
        /**
         * 获取购物车当中最新添加的几条数据
         * @return [type] [description]
         */
        public function getPre($number){
            $num = $this->getAllItem();
            if(!empty($num)){
                if(count($num)>=$number){
                    $vo = array();
                    foreach ($num as $key => $value) {
                        $vo[] = $value['addtime'];
                    }
                    /**
                     * 将数据根据 volume 降序排列,根据 edition 升序排列
                         把 $data 作为最后一个参数,以通用键排序
                        array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
                         
                     */
                    $sor  = $num;
                    array_multisort($vo,SORT_DESC,$sor);
                    return array_slice($sor,0,$number);
                }else{
                    return $num;
                }
            }else{
                return false;
            }
        }
    }
    //测试代码
    /*
    $car = CartTool::getCart();
    $car->addItem(1,"1",12,1);
    $car->addItem(2,"1",12,1);
    $car->addItem(2,"1",12,2);
    $car->clear();
    var_dump($car);
    ///$car->clear();
    echo "<hr/>";
    var_dump($car);
    $car->increaNum(2);
    $car->clear();
    var_dump($car);
    var_dump($car->getAllItem());
    */
    //测试代码
    /*
    $car = CartTool::getCart();
    $car->addItem(1,"1",12,1);
    $car->addItem(2,"1",12,1);
    $car->addItem(2,"1",12,2);
    $car->clear();
    var_dump($car);
    ///$car->clear();
    echo "<hr/>";
    var_dump($car);
    $car->increaNum(2);
    $car->clear();
    var_dump($car);
    var_dump($car->getAllItem());
    */
  • 相关阅读:
    P4995 跳跳!
    P4306 [JSOI2010]连通数
    P1339 [USACO09OCT]热浪Heat Wave
    P2002 消息扩散
    P3388 【模板】割点(割顶)
    P1656 炸铁路
    P2863 [USACO06JAN]牛的舞会The Cow Prom
    P1516 青蛙的约会
    3.从尾到头打印链表
    2.替换空格
  • 原文地址:https://www.cnblogs.com/webcyh/p/11296473.html
Copyright © 2011-2022 走看看