一个比较完善的购物车类
2024年02月25日
前不久做到一个项目需要用到购物车,考虑到可能经常用到,所以把它封装成一个类,以便以后调用。你可以简单的把这个类稍微修改一下就可以用在自己的程序里了,具体使用请见。<?
/*****************************************************************************/
/**/
/*file type:包含文件,建议后缀为.inc*/
/**/
/*file name:cart.inc*/
/**/
/*Description:定义一个购车类*/
/**/
/*Func list:class cart*/
/**/
/*author:bigeagle*/
/**/
/*date:2000/12/24*/
/**/
/*History:2000/12/24 finished*/
/**/
/*****************************************************************************/
//定义本文件常量
define("_CART_INC_","exists");
/*购物车类*/
class TCart
{
var$SortCount;//商品种类数
var$TotalCost;//商品总价值
var$Id;//每类商品的ID(数组)
var$Name;//每类商品的名称(数组)
var$Price;//每类商品的价格(数组)
var$Discount;//商品的折扣(数组)
var$GoodPrice;//商品的优惠价格(数组)
var$Count;//每类商品的件数(数组)
var$MaxCount;//商品限量(数组)
//******构造函数
function TCart()
{
$this->SortCount=0;
session_start();//初始化一个session
session_register('sId');
session_register('sName');
session_register('sPrice');
session_register('sDiscount');
session_register('sGoodPrice');
session_register('sCount');
session_register('sMaxCount');
$this->Update();
$this->Calculate();
}
//********私有,根据session的值更新类中相应数据
function Update()
{
global$sId,$sName,$sPrice,$sCount,$sDiscount,$sMaxCount,$sGoodPrice;
if(!isset($sId)or!isset($sName)or!isset($sPrice)
or!isset($sDiscount)or!isset($sMaxCount)
or!isset($sGoodPrice)or!isset($sCount))return;
$this->Id=$sId;
$this->Name=$sName;
$this->Price=$sPrice;
$this->Count=$sCount;
$this->Discount=$sDiscount;
$this->GoodPrice=$sGoodPrice;
$this->MaxCount=$sMaxCount;
//计算商品总数
$this->SortCount=count($sId);
}
//********私有,根据新的数据计算每类商品的价值及全部商品的总价
function Calculate()
{
for($i=0;$i<$this->SortCount;$i++)
{
/*计算每件商品的价值,如果折扣是0,则为优惠价格*/
$GiftPrice=($this->Discount[$i]==0?$this->GoodPrice:
ceil($this->Price[$i]*$this->Discount[$i])/100);
$this->TotalCost+=$GiftPrice*$this->Count[$i];
}
}
//**************以下为接口函数
//***加一件商品
//判断是否蓝中已有,如有,加count,否则加一个新商品
//首先都是改session的值,然后再调用update()and calculate()来更新成员变量
function Add($a_ID,$a_Name,$a_Price,$a_Discount,
$a_GoodPrice,$a_MaxCount,$a_Count)
{
global$sId,$sName,$sCount,$sPrice,$sDiscount,
$sGoodPrice,$sMaxCount;
$k=count($sId);
for($i=0;$i<$k;$i++)
{//先找一下是否已经加入了这种商品
if($sId[$i]==$a_ID)
{
$sCount[$i]+=$a_Count;
break;
}
}
if($i>=$k)
{//没有则加一个新商品种类
$sId[]=$a_ID;
$sName[]=$a_Name;
$sPrice[]=$a_Price;
$sCount[]=$a_Count;
$sGoodPrice[]=$a_GoodPrice;
$sDiscount[]=$a_Discount;
$sMaxCount[]=$a_MaxCount;
}
$this->Update();//更新一下类的成员数据
$this->Calculate();
}
//移去一件商品
function Remove($a_ID)
{
global$sId,$sName,$sCount,$sPrice,$sDiscount,
$sGoodPrice,$sMaxCount;
$k=count($sId);
for($i=0;$i<$k;$i++)
{
if($sId[$i]==$a_ID)
{
$sCount[$i]=0;
break;
}
}
$this->Update();
$this->Calculate();
}
//改变商品的个数
function ModifyCount($a_i,$a_Count)
{
global$sCount;
$sCount[$a_i]=$a_Count;
$this->Update();
$this->Calculate();
}
/***************************
清空所有的商品
*****************************/
function RemoveAll()
{
session_unregister('sId');
session_unregister('sName');
session_unregister('sPrice');
session_unregister('sDiscount');
session_unregister('sGoodPrice');
session_unregister('sCount');
session_unregister('sMaxCount');
$this->SortCount=0;
$this->TotalCost=0;
}
//是否某件商品已在蓝内,参数为此商品的ID
function Exists($a_ID)
{
for($i=0;$i<$this->SortCount;$i++)
{
if($this->Id[$i]==$a_ID)return TRUE;
}
return FALSE;
}
//某件商品在蓝内的位置
function IndexOf($a_ID)
{
for($i=0;$i<$this->SortCount;$i++)
{
if($this->Id[$i]==$id)return$i;
}
return 0;
}
//取一件商品的信息,主要的工作函数
//返回一个关联数组,
function Item($i)
{
$Result[id]=$this->Id[$i];
$Result[name]=$this->Name[$i];
$Result[price]=$this->Price[$i];
$Result[count]=$this->Count[$i];
$Result[discount]=$this->Discount[$i];
$Result[goodprice]=$this->GoodPrice[$i];
$Result[maxcount]=$this->MaxCount<i>;
return$Result;
}
//取总的商品种类数
function CartCount()
{
return$this->SortCount;
}
//取总的商品价值
function GetTotalCost()
{
return$this->TotalCost;
}
}