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());
    */
  • 相关阅读:
    hdu2328 Corporate Identity
    hdu1238 Substrings
    hdu4300 Clairewd’s message
    hdu3336 Count the string
    hdu2597 Simpsons’ Hidden Talents
    poj3080 Blue Jeans
    poj2752 Seek the Name, Seek the Fame
    poj2406 Power Strings
    hust1010 The Minimum Length
    hdu1358 Period
  • 原文地址:https://www.cnblogs.com/webcyh/p/11296473.html
Copyright © 2011-2022 走看看