PHP购物车类练习代码

---恢复内容开始---

购物车类

代码如下:

  1 class Cart
  2 {
  3     static protected $object;   //变量
  4     static protected $item = array();     //存储商品信息的数组
  5     
  6     final protected function __construct()
  7     {
  8         //如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为final,则不能被继承。禁止在外部使用
  9     }
 10     
 11     final protected function __clone()
 12     {
 13         //同上
 14     }
 15     
 16     //实例化类
 17     static public function init()
 18     {
 19         return new self;
 20     }
 21     
 22     //获取实例对象
 23     static public function getObject()
 24     {
 25         if( !isset($_SESSION['cart']) || !($_SESSION['cart'] instanceof self) )
 26         {
 27             $_SESSION['cart'] = self::init();
 28             self::$object = $_SESSION['cart'];
 29             return self::$object;
 30         }
 31     }
 32     
 33     function __get($name)
 34     {
 35         return self::$$name;
 36     }
 37     
 38     //获取购物车内商品的种类数量
 39     function getType()
 40     {
 41         return count(self::$item);
 42     }
 43     
 44     //检测购物车内是否存在某种商品
 45     function inItem($goodsId)
 46     {
 47         if( $this->getType() == 0 )   //若购物车内不存在任何商品,自然也就不存在此种商品
 48         {
 49             return;   //不存在
 50         }
 51         
 52         if( array_key_exists($goodsId,self::$item) )
 53         {
 54             return true;   //存在
 55         }
 56         else
 57         {
 58             return false;   //不存在
 59         }
 60     }
 61     
 62     //增加一种商品:若此商品信息已经存在于购物车内,只需增加商品数量;若购物车内不存在此商品的任何信息,需要增加此商品的全部信息
 63     function addItem($goodsId,$name,$num,$price)
 64     {
 65         if( $this->inItem($goodsId) )
 66         {
 67             self::$item[$goodsId]['num'] += $num;
 68             return;
 69         }
 70         
 71         self::$item[$goodsId] = array();
 72         
 73         self::$item[$goodsId]['name'] = $name;
 74         self::$item[$goodsId]['num'] = $num;
 75         self::$item[$goodsId]['price'] = $price;
 76         
 77     }
 78     
 79     //减少一种商品的数量
 80     function reduceItem($goodsId,$num)   
 81     {
 82         if( $num > self::$item[$goodsId]['num'] )
 83         {
 84             unset(self::$item[$goodsId]);
 85         }
 86         else
 87         {
 88             self::$item[$goodsId]['num'] -= $num;
 89         }
 90     }
 91     
 92     //完全去掉某种商品
 93     function delItem($goodsId)
 94     {
 95         unset(self::$item[$goodsId]);
 96     }
 97     
 98     //获取一种商品的数量
 99     function getNum($goodsId)
100     {
101         return self::$item[$goodsId]['num'];
102     }
103     
104     //获取所有商品的数量
105     function getNumber()
106     {
107         $num = 0;
108         foreach( self::$item as $value )
109         {
110             $num += $value['num'];
111         }
112         return $num;
113     }
114     
115     //获取所有商品的价格
116     function getPrice()
117     {
118         $price = 0;
119         foreach( self::$item as $value )
120         {
121             $price += $value['price']*$value['num'];
122         }
123         return $price;
124     }
125     
126     //情况购物车
127     function emptyCart()
128     {
129         self::$item = array();
130     }
131 }

测试代码,如下:

 1 $cart = Cart::getObject();
 2 var_dump($cart);
 3 $cart->addItem(1,'PHP','30','50');
 4 $cart->addItem(2,'Java','3','50');
 5 $item = $cart->__get('item');
 6 var_dump($item);
 7 $price = $cart->getPrice();
 8 var_dump($price);
 9 $num = $cart->getNum(1);
10 var_dump($num);
11 $number = $cart->getNumber();
12 var_dump($number);
13 $cart->reduceItem(1,20);
14 $item = $cart->__get('item');
15 var_dump($item);

---恢复内容结束---

原文地址:https://www.cnblogs.com/chuganghong/p/3061308.html