一个比较完善的购物车类

前不久做到一个项目需要用到购物车,考虑到可能经常用到,所以把它封装成一个类,以便以后调用,你可以简单的把这个类稍微修改一下就可以用在自己的程序里了.

  1. <?php
  2. /*****************************************************************************/
  3. /* */
  4. /* file type: 包含文件,建议后缀为.inc */
  5. /* */
  6. /* file name: cart.inc */
  7. /* */
  8. /* Description: 定义一个购车类 */
  9. /* */
  10. /* Func list : class cart */
  11. /* */
  12. /* author : bigeagle */
  13. /* */
  14. /* date : 2000/12/24 */
  15. /* */
  16. /* History: 2000/12/24 finished */
  17. /* */
  18. /*****************************************************************************/
  19. //定义本文件常量
  20. define("_CART_INC_" , "exists") ;
  21. /*购物车类*/
  22. class TCart
  23. {
  24. var $SortCount; //商品种类数
  25. var $TotalCost; //商品总价值
  26. var $Id; //每类商品的ID(数组)
  27. var $Name; //每类商品的名称(数组)
  28. var $Price; //每类商品的价格(数组)
  29. var $Discount; //商品的折扣(数组)
  30. var $GoodPrice ; //商品的优惠价格(数组)
  31. var $Count; //每类商品的件数(数组)
  32. var $MaxCount ; //商品限量(数组)
  33. //******构造函数
  34. function TCart()
  35. {
  36. $this->SortCount=0;
  37. session_start(); //初始化一个session
  38. session_register('sId');
  39. session_register('sName');
  40. session_register('sPrice');
  41. session_register('sDiscount');
  42. session_register('sGoodPrice') ;
  43. session_register('sCount') ;
  44. session_register('sMaxCount') ;
  45. $this->Update();
  46. $this->Calculate();
  47. }
  48. //********私有,根据session的值更新类中相应数据
  49. function Update()
  50. {
  51. global $sId,$sName,$sPrice,$sCount,$sDiscount,$sMaxCount,$sGoodPrice;
  52. if(!isset($sId) or !isset($sName) or !isset($sPrice)
  53. or !isset($sDiscount) or !isset($sMaxCount)
  54. or !isset($sGoodPrice) or !isset($sCount)) return;
  55. $this->Id =$sId;
  56. $this->Name =$sName;
  57. $this->Price =$sPrice;
  58. $this->Count =$sCount;
  59. $this->Discount = $sDiscount ;
  60. $this->GoodPrice = $sGoodPrice ;
  61. $this->MaxCount = $sMaxCount ;
  62. //计算商品总数
  63. $this->SortCount=count($sId);
  64. }
  65. //********私有,根据新的数据计算每类商品的价值及全部商品的总价
  66. function Calculate()
  67. {
  68. for($i=0;$i<$this->SortCount;$i++)
  69. {
  70. /*计算每件商品的价值,如果折扣是0 ,则为优惠价格*/
  71. $GiftPrice = ($this->Discount[$i] == 0 ? $this->GoodPrice :
  72. ceil($this->Price[$i] * $this->Discount[$i])/100 );
  73. $this->TotalCost += $GiftPrice * $this->Count[$i] ;
  74. }
  75. }
  76. //**************以下为接口函数
  77. //*** 加一件商品
  78. // 判断是否蓝中已有,如有,加count,否则加一个新商品
  79. //首先都是改session的值,然后再调用update() and calculate()来更新成员变量
  80. function Add($a_ID , $a_Name , $a_Price , $a_Discount ,
  81. $a_GoodPrice , $a_MaxCount , $a_Count)
  82. {
  83. global $sId , $sName , $sCount , $sPrice , $sDiscount ,
  84. $sGoodPrice , $sMaxCount ;
  85. $k=count($sId);
  86. for ($i=0; $i<$k; $i++)
  87. { //先找一下是否已经加入了这种商品
  88. if($sId[$i]==$a_ID)
  89. {
  90. $sCount[$i] += $a_Count ;
  91. break;
  92. }
  93. }
  94. if($i >= $k)
  95. { //没有则加一个新商品种类
  96. $sId[] = $a_ID;
  97. $sName[] = $a_Name;
  98. $sPrice[] = $a_Price;
  99. $sCount[] = $a_Count;
  100. $sGoodPrice[] = $a_GoodPrice ;
  101. $sDiscount[] = $a_Discount ;
  102. $sMaxCount[] = $a_MaxCount ;
  103. }
  104. $this->Update(); //更新一下类的成员数据
  105. $this->Calculate();
  106. }
  107. //移去一件商品
  108. function Remove($a_ID)
  109. {
  110. global $sId , $sName , $sCount , $sPrice , $sDiscount ,
  111. $sGoodPrice , $sMaxCount ;
  112. $k = count($sId);
  113. for($i=0; $i < $k; $i++)
  114. {
  115. if($sId[$i] == $a_ID)
  116. {
  117. $sCount[$i] = 0 ;
  118. break;
  119. }
  120. }
  121. $this->Update();
  122. $this->Calculate();
  123. }
  124. //改变商品的个数
  125. function ModifyCount($a_i,$a_Count)
  126. {
  127. global $sCount;
  128. $sCount[$a_i] = $a_Count ;
  129. $this->Update();
  130. $this->Calculate();
  131. }
  132. /***************************
  133. 清空所有的商品
  134. *****************************/
  135. function RemoveAll()
  136. {
  137. session_unregister('sId');
  138. session_unregister('sName');
  139. session_unregister('sPrice');
  140. session_unregister('sDiscount');
  141. session_unregister('sGoodPrice') ;
  142. session_unregister('sCount') ;
  143. session_unregister('sMaxCount') ;
  144. $this->SortCount = 0 ;
  145. $this->TotalCost = 0 ;
  146. }
  147. //是否某件商品已在蓝内,参数为此商品的ID
  148. function Exists($a_ID)
  149. {
  150. for($i=0; $i<$this->SortCount; $i++)
  151. {
  152. if($this->Id[$i]==$a_ID) return TRUE;
  153. }
  154. return FALSE;
  155. }
  156. //某件商品在蓝内的位置
  157. function IndexOf($a_ID)
  158. {
  159. for($i=0; $i<$this->SortCount; $i++)
  160. {
  161. if($this->Id[$i]==$id) return $i;
  162. }
  163. return 0;
  164. }
  165. //取一件商品的信息,主要的工作函数
  166. //返回一个关联数组,
  167. function Item($i)
  168. {
  169. $Result[id] = $this->Id[$i];
  170. $Result[name] = $this->Name[$i];
  171. $Result[price] = $this->Price[$i];
  172. $Result[count] = $this->Count[$i];
  173. $Result[discount] = $this->Discount[$i] ;
  174. $Result[goodprice] = $this->GoodPrice[$i] ;
  175. $Result[maxcount] = $this->MaxCount[i] ;
  176. return $Result;
  177. }
  178. //取总的商品种类数
  179. function CartCount()
  180. {
  181. return $this->SortCount;
  182. }
  183. //取总的商品价值
  184. function GetTotalCost()
  185. {
  186. return $this->TotalCost;
  187. }
  188. }
  189. ?>