一个比较完善的购物车类

  前不久做到一个项目需要用到购物车,考虑到可能经常用到,所以把它封装成一个类,以便以后调用。你可以简单的把这个类稍微修改一下就可以用在自己的程序里了,具体使用请见。
  <?
  /*****************************************************************************/
  /**/
  /*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-&gt;MaxCount<i>;
  return$Result;
  }
  //取总的商品种类数
  function CartCount()
  {
  return$this-&gt;SortCount;
  }
  //取总的商品价值
  function GetTotalCost()
  {
  return$this-&gt;TotalCost;
  }
  }