首页 > 开发 > PHP > 正文

一个比较完善的购物车类

2024-05-04 22:55:32
字体:
来源:转载
供稿:网友
 
    前不久做到一个项目需要用到购物车,考虑到可能经常用到,所以把它封装成一个类,以便以后调用。你可以简单的把这个类稍微修改一下就可以用在自己的程序里了,具体使用请见http://bigeagle.wotoo.com/article.asp?type=1。

<?
/*****************************************************************************/
/*                                                                           */
/* 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;
  }
}  
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表