首页 > 其他 > 详细

时间:2014年4月13日09:46:13 购物车类

时间:2014-04-14 01:17:25      阅读:525      评论:0      收藏:0      [点我收藏+]


购物车分析:

无论在本网站刷新了多少次页面,或者新增了多少商品

都要求你看到购物车时,看到的商品时一样的

即在整站范围内,购物车是全局有效的


解决:购物车的信息放在数据库或者sessioncookie


因此购物车的实例只能有一个,

解决:单例模式


因此购物车的选型为: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

时间:2014年4月13日09:46:13 购物车类

原文:http://duguodong.blog.51cto.com/7667978/1395015

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!