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']); ?>