zoukankan      html  css  js  c++  java
  • PHP购物车类

    <?php
    /**
     * 购物车类
     */
    session_start();
    class Cart{
    
        private static $ins = null;
        private $items = array();
    
        protected function __construct(){}
    
        // 获取实例
        protected 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'];
        }
    
        /**
         * 添加商品
         * @param int $id 商品ID
         * @param string $name 商品名称
         * @param float $price 商品价格
         * @param int $num 购买商品数量
         */
        public function addItem($id,$name,$price,$num=1){
            # 商品已经在购物中,就添加其数量
            if($this->hasItem($id)){
                $this->incCartNum($id,$num);
                return true;
            }
            $this->items[$id] = array(
                'id'    => $id,
                'name'  => $name,
                'price' => $price,
                'num'   => $num
            );
            return true;
        }
    
        /**
         * 清空购物车
         */
        public function clearCart(){
            $this->items = array();
        }
    
        /**
         * 判断一个商品是否存在
         * @param int $id 商品ID
         */
        public function hasItem($id){
            return array_key_exists($id,$this->items);
        }
    
        /**
         * 修改购物车中的商品数量
         * @param int $id 商品ID
         * @param int $num 某个商品修改后的数量,即直接把某商品的数量改为$num
         */
        public function modifyCartNum($id,$num=1){
            if(!$this->hasItem($id)){
                return false;
            }
            $this->items[$id]['num'] = $num;
        }
    
        /**
         * 商品数量增加1
         */
        public function incCartNum($id,$num=1){
            if($this->hasItem($id)){
                $this->items[$id]['num'] += $num;
            }
        }
    
        /**
         * 商品数量减少1
         */
        public function decCartNum($id,$num=1){
            if($this->hasItem($id)){
                $this->items[$id]['num'] -= $num;
            }
            if($this->items[$id]['num'] < 1){
                $this->deleteCartGoods($id);
            }
        }
    
        /**
         * 删除商品
         */
        public function deleteCartGoods($id){
            return unset($this->items[$id]);
        }
    
        /**
         * 查询购物车商品种类的数量
         */
        public function getCount(){
            return count($this->items);
        }
    
        /**
         * 查询购物车商品的个数
         */
        public function getGoodsNum(){
            if($this->getCount == 0) return 0;
    
            $sum = 0;
            foreach($this->items as $item){
                $sum += $item['num'];
            }
    
            return $sum;
        }
    
        /**
         * 查询购物车商品的总金额
         */
        public function getGoodsPriceTotal(){
            if($this->getCount == 0) return 0;
    
            $price = 0.0;
            foreach($this->items as $item){
                $price += $item['num']*$item['price'];
            }
    
            return $price;
        }
    
        /**
         * 返回购物车的所有商品
         */
        public function getCartList(){
            if($this->getCount == 0) return false;
    
            return $this->items;
        }
    
    }
    ?>
  • 相关阅读:
    linux内存的使用与page buffer (转)
    基于linux2.6.38.8内核的SDIO/wifi驱动分析(转)
    RamDisk块设备驱动实例开发讲解一
    Linux加密框架设计与实现(转)
    v4l2子系统学习心得
    一句memset引发的疑案
    linux 信号量之SIGNAL 0(转)
    可重入函数
    从ARM VIVT看linux的cache 处理
    内核抢占与preempt_count
  • 原文地址:https://www.cnblogs.com/ahwu/p/5460314.html
Copyright © 2011-2022 走看看