1 <?php
2 /**
3 * php 购物车类
4 * 单例模式
5 */
6 class Cart{
7 static protected $ins; //实例变量
8 protected $item = array(); //放商品容器
9
10 //禁止外部调用
11 final protected function __construct(){
12 }
13
14 //禁止克隆
15 final protected function __clone(){
16 }
17
18 //类内部实例化
19 static protected function Getins(){
20 if(!(self::$ins instanceof self)){
21 self::$ins = new self();
22 }
23
24 return self::$ins;
25 }
26
27 //为了能使商品跨页面保存,把对象放入session里
28 public function Getcat(){
29 if(!($_SESSION['cat']) || !($_SESSION['cat'] instanceof self)){
30 $_SESSION['cat'] = self::Getins();
31 }
32
33 return $_SESSION['cat'];
34 }
35
36 //入列时的检验,是否在$item里存在.
37 public function Initem($goods_id){
38 if($this->Gettype() == 0){
39 return false;
40 }
41 if(!(array_key_exists($goods_id,$this->item))){
42 return false;
43 }else{
44 return $this->item[$goods_id]['num']; //返回此商品个数
45 }
46 }
47
48 //添加一个商品
49 public function Additem($goods_id,$name,$num,$price){
50 if($this->Initem($goods_id) != false){
51 $this->item[$goods_id]['num'] += $num;
52 return;
53 }
54
55 $this->item[$goods_id] = array(); //一个商品为一个数组
56 $this->item[$goods_id]['num'] = $num; //这一个商品的购买数量
57 $this->item[$goods_id]['name'] = $name; //商品名字
58 $this->item[$goods_id]['price'] = $price; //商品单价
59 }
60
61 //减少一个商品
62 public function Reduceitem($goods_id,$num){
63 if($this->Initem($goods_id) == false){
64 return;
65 }
66 if($num > $this->Getunm($goods_id)){
67 unset($this->item[$goods_id]);
68 }else{
69 $this->item[$goods_id]['num'] -=$num;
70 }
71 }
72
73 //去掉一个商品
74 public function Delitem($goods_id){
75 if($this->Initem($goods_id)){
76 unset($this->item[$goods_id]);
77 }
78 }
79
80 //返回购买商品列表
81 public function Itemlist(){
82 return $this->item;
83 }
84
85 //一共有多少种商品
86 public function Gettype(){
87 return count($this->item);
88 }
89
90 //获得一种商品的总个数
91 public function Getunm($goods_id){
92 return $this->item[$goods_id]['num'];
93 }
94
95 // 查询购物车中有多少个商品
96 public function Getnumber(){
97 $num = 0;
98 if($this->Gettype() == 0){
99 return 0;
100 }
101
102 foreach($this->item as $k=>$v){
103 $num += $v['num'];
104 }
105 return $num;
106 }
107
108 //计算总价格
109 public function Getprice(){
110 $price = 0;
111 if($this->Gettype() == 0){
112 return 0;
113 }
114
115 foreach($this->item as $k=>$v){
116 $price += $v['num']*$v['num'];
117 }
118 return $price;
119 }
120
121 //清空购物车
122 public function Emptyitem(){
123 $this->item = array();
124 }
125 }
126 ?>
<?php
session_start();
header("Content-type = text/html; charset=utf-8");
include_once('Cart.php');
$cart = Cart::Getcat();
$cart->Additem('1','php学习教程(脚本学堂版)','5','9999');
$cart->Additem('1','php学习教程(脚本学堂版)','52','9999');
$cart->Additem('2','php学习教程(脚本学堂版)2','52','99992');
print_r($cart);
var_dump($_SESSION['cat']);
?>