购物车分析:
无论在本网站刷新了多少次页面,或者新增了多少商品
都要求你看到购物车时,看到的商品时一样的
即在整站范围内,购物车是全局有效的
解决:购物车的信息放在数据库或者session或cookie中
因此购物车的实例只能有一个,
解决:单例模式
因此购物车的选型为:session+单例
功能分析:
判断某个商品是否存在
增加商品
修改商品数量
删除商品
某商品数量加1
某商品数量减1
查询购物车的商品种类
查询购物车的商品数量
查询购物车的商品总金额
返回购物车的所有商品
清空购物车
<?php /** * Created by PhpStorm. * User: Administrator * Date: 14-4-13 * Time: 上午9:49 */ /*开启会话*/ defined(‘ACC‘) || exit(‘ACC Denied‘); class CartTool{ private static$ins = null; /*用数组保存商品*/ private$items = array(); // public $sign = 0; /*保护构造方法*/ finalprotectedfunction__construct(){ //$this->sign = mt_rand(0,9999999); } /*保护克隆方法*/ finalprotectedfunction__clone(){} /*单例方法获取实例*/ protectedstaticfunctiongetIns(){ if(!(self::$ins instanceof self)){ self::$ins = new self(); } return self::$ins; } /*把购物车的单例对象,放到session中整个网站都共享此实例*/ publicstaticfunctiongetCart(){ /**/ if(!isset($_SESSION[‘cart‘]) || !($_SESSION[‘cart‘] instanceof self)){ $_SESSION[‘cart‘] = self::getIns(); } return $_SESSION[‘cart‘]; } /*添加商品 @param intid 商品主键 @param string name 商品名称 @param float price 商品价格 @param int num 购物数量 */ publicfunctionaddItem($id,$name,$price,$num = 1){ /*商品id 唯一,作为数组下表此时数组已经作为二维数组*/ if($this->hasItem($id)){ /*如果该商品已经存在,则直接加其数量*/ $this->incNum($id,$num); return; } $item = array(); $item[‘name‘] = $name; $item[‘price‘] = $price; $item[‘num‘] = $num; $this->items[$id] =$item; } /*清空购物车*/ publicfunctionclear(){ $this->items = array(); } /*判断某个商品是否存在*/ publicfunctionhasItem($id){ return array_key_exists($id,$this->items); } /*修改商品数量 @param int id 商品主键 @param int num 某个商品修改后的数量,即直接把商品数量修改为num*/ publicfunctionmodNum($id,$num=1){ if(!$this->hasItem($id)){ return false; } $this->items[$id][‘num‘] = $num; } /*商品数量增加1*/ publicfunctionincNum($id,$num =1){ if($this->hasItem($id)){ $this->items[$id][‘num‘] +=1; } } /*商品数量减少1*/ publicfunctiondecNum($id,$num =1){ if($this->hasItem($id)){ $this->items[$id][‘num‘] -=$num; } /*如果数量减到0 就应该从购物车删除*/ if($this->items[$id][num]<1){ $this->delItem($id); } } /*删除商品*/ publicfunctiondelItem($id){ unset($this->items[$id]); } /*查询购物车中商品的种类*/ publicfunctiongetCnt(){ return count($this->items); } /*查询购物车中商品的个数*/ publicfunctiongetNum(){ if($this->getCnt() == 0 ){ return 0; } $sum = 0; foreach($this->items as $item){ $sum += $item[‘num‘]; } return $sum; } /*查询购物车中商品的总金额*/ publicfunctiongetPrice(){ if($this->getCnt() == 0){ return 0; } $price = 0.0; foreach($this->items as $item){ $price += $item[‘num‘]*$item[‘price‘]; } return $price; } /*返回购物车中的所有商品*/ publicfunctiongetAll(){ return $this->items; } } /*测试单例模式*/ //print_r(CartTool::getCart()); //测试添加购物车,清空购物车 /* $cart = CartTool::getCart(); if($_GET[‘test‘] == ‘add‘){ $cart->addItem(1,‘apple‘,23,3); $cart->addItem(32,‘egg‘,54.7,1); $cart->addItem(5,‘water‘,34.1,4); echo "add ok"; }else if($_GET[‘test‘] == ‘clear‘){ $cart->clear(); }else if($_GET[‘test‘] == ‘show‘){ print_r($cart->getAll()); echo ‘<br/>‘; echo "共".$cart->getCnt()."种商品".$cart->getNum().‘个‘; echo ‘共‘.$cart->getPrice().‘元‘; }else{ print_r($cart); }*/ |
本文出自 “杜国栋个人PHP学习博文” 博客,请务必保留此出处http://duguodong.blog.51cto.com/7667978/1395015
时间:2014年4月13日09:46:13 购物车类,布布扣,bubuko.com
原文:http://duguodong.blog.51cto.com/7667978/1395015