示例PHP购物车类Cart.class.php定义与用法

本文实例讲述了PHP购物车类Cart.class.php定义与用法,分享给大家供大家参考,具体如下:

之前的开发人员使用了JS的技术开发了一套前台购物车(删除添加什么的都使用JS),但是浏览器兼容不好, 今天终于出问题了, 有个老外购物了产品, 由于使用了不知名的浏览器, chrome, opera…都有可能, 因此, 我多了一份工作, 重写购物车.

不打算再使用JS, 直接考虑php.

找到了一个购物车的类, 使用起来很方便.

Cart.class.php源码:

  1. <?php
  2. /**
  3. * Cart
  4. *
  5. * 购物车类
  6. *
  7. * @author doodoo<pwtitle @yahoo.com.cn="">
  8. * @package Cart
  9. * @category Cart
  10. * @license PHP License
  11. * @access public
  12. * @version $Revision: 1.10 $
  13. */
  14. Class Cart{
  15. var $cart;
  16. var $totalCount; //商品总数量
  17. var $totalPrices; //商品总金额
  18. /**
  19. * Cart Constructor
  20. *
  21. * 类的构造函数,使购物车保持稳定的初始化状态
  22. *
  23. * @static
  24. * @access public
  25. * @return void 无返回值
  26. * @param void 无参数
  27. */
  28. function Cart(){
  29. $this->totalCount = 0;
  30. $this->totalPrice = 0;
  31. $this->cart = array();
  32. }
  33. // }}}
  34. // {{{ add($item)
  35. /**
  36. * 增加商品到当前购物车
  37. *
  38. * @access public
  39. * @param array $item 商品信息(一维数组:array(商品ID,商品名称,商品单价,商品数量))
  40. * @return array 返回当前购物车内商品的数组
  41. */
  42. function add($item){
  43. if(!is_array($item)||is_null($item)) return $this->cart;
  44. if(!is_numeric(end($item))||(!is_numeric(prev($item)))) {
  45. echo "价格和数量必须是数字";
  46. return $this->cart;
  47. }
  48. reset($item); //这一句是必须的,因为上面的判断已经移动了数组的指标
  49. $key = current($item);
  50. if($key=="") return $this->cart;
  51. if($this->_isExists($key)){ //商品是否已经存在?
  52. $this->cart[$key]['count'] = end($item);
  53. return $this->cart;
  54. }
  55. $this->cart[$key]['ID'] = $key;
  56. $this->cart[$key]['name'] = next($item);
  57. $this->cart[$key]['price'] = next($item);
  58. $this->cart[$key]['count'] = next($item);
  59. return $this->cart;
  60. }
  61. // }}}
  62. // {{{ add($item)
  63. /**
  64. * 从当前购物车中取出部分或全部商品
  65. * 当 $key=="" 的时候,清空当前购物车
  66. * 当 $key!=""&&$count=="" 的时候,从当前购物车中拣出商品ID号为 $key 的全部商品
  67. * 当 $key!=""&&$count!="" 的时候,从当前购物车中拣出 $count个 商品ID号为 $key 的商品
  68. *
  69. * @access public
  70. * @param string $key 商品ID
  71. * @return mixed 返回真假或当前购物车内商品的数组
  72. */
  73. function remove($key="",$count=""){
  74. if($key=="") {
  75. $this->cart = array();
  76. return true;
  77. }
  78. if(!array_key_exists($key,$this->cart)) return false;
  79. if($count==""){ //移去这一类商品
  80. unset($this->cart[$key]);
  81. }else{ //移去$count个商品
  82. $this->cart[$key]['count'] -= $count;
  83. if($this->cart[$key]['count']<=0) unset($this->cart[$key]);
  84. }
  85. return $this->cart;
  86. }
  87. // }}}
  88. // {{{ modi($key,$value)
  89. /**
  90. * 修改购物车内商品ID为 $key 的商品的数量为 $value
  91. *
  92. * @access public
  93. * @param string $key 商品ID
  94. * @param int $value 商品数量
  95. * @return array 返回当前购物车内商品的数组;
  96. */
  97. function modi($key,$value){
  98. if(!$this->_isExists($key)) return $this->cart(); //不存在此商品,直接返回
  99. if($value<=0){ // value 太小,全部删除
  100. unset($this->cart[$key]);
  101. return $this->cart;
  102. }
  103. $this->cart[$key]['count'] = $value;
  104. return $this->cart;
  105. }
  106. /**
  107. * 返回当前购物车内商品的数组
  108. *
  109. * @access public
  110. * @return array 返回当前购物车内商品的数组;
  111. */
  112. function getCart(){
  113. return $this->cart;
  114. }
  115. // }}}
  116. // {{{ _isExists($key)
  117. /**
  118. * 判断当前购物车中是否存在商品ID号为$key的商品
  119. *
  120. * @access private
  121. * @param string $key 商品ID
  122. * @return bool true or false;
  123. */
  124. function _isExists($key)
  125. {
  126. if(isset($this->cart[$key])&&!emptyempty($this->cart[$key])&&array_key_exists($key,$this->cart))
  127. return true;
  128. return false;
  129. }
  130. // }}}
  131. // {{{ isEmpty()
  132. /**
  133. * 判断当前购物车是否为空,即没有任何商品
  134. *
  135. * @access public
  136. * @return bool true or false;
  137. */
  138. function isEmpty(){
  139. return !count($this->cart);
  140. }
  141. // }}}
  142. // {{{ _stat()
  143. /**
  144. * 取得部分统计信息
  145. *
  146. * @access private
  147. * @return bool true or false;
  148. */
  149. function _stat(){
  150. if($this->isEmpty()) return false;
  151. foreach($this->cart as $item){
  152. $this->totalCount = @end($item);
  153. $this->totalPrices = @prev($item);
  154. }
  155. return true;
  156. }
  157. // }}}
  158. // {{{ totalPrices()
  159. /**
  160. * 取得当前购物车所有商品的总金额
  161. *
  162. * @access public
  163. * @return float 返回金额;
  164. */
  165. function totalPrices(){
  166. if($this->_stat())
  167. return $this->totalPrices;
  168. return 0;
  169. }
  170. // }}}
  171. // {{{ isEmpty()
  172. /**
  173. * 取得当前购物车所有商品的总数量和
  174. *
  175. * @access public
  176. * @return int ;
  177. */
  178. function totalCount(){
  179. if($this->_stat())
  180. return $this->totalCount;
  181. return 0;
  182. }
  183. }//End Class Cart
  184. ?>

使用该类的方法:

  1. <?php
  2. header("Content-type:text/html;charset=utf8");
  3. //调用实例
  4. require_once 'Cart.class.php';
  5. session_start();
  6. if(!isset($_SESSION['cart'])) {
  7. $_SESSION['cart'] = new Cart;
  8. }
  9. $cart =& $_SESSION['cart'];
  10. if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='add') ){
  11. $p = $_POST['p'];
  12. $items = $cart->add($p);
  13. }
  14. if( ($_GET['action']=='remove')&&($_GET['key']!="") ) {
  15. $items = $cart->remove($_GET['key']);
  16. }
  17. if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='modi') ){
  18. $key = $_POST['key'];
  19. $value = $_POST['value'];
  20. for($i=0;$i<count ($key);$i="" $items="$cart-" ){="">modi($key[$i],$value[$i]);
  21. }
  22. }
  23. $items = $cart->getCart();
  24. //打印
  25. echo "";
  26. setlocale(LC_MONETARY, 'it_IT');
  27. foreach($items as $item){
  28. echo "";
  29. echo "<table ><tbody><tr><form action="\&quot;index.php\&quot;" method="\" post\??=""></form><td>ID:".$item['ID']."<input type="hidden" value=".$item['ID']." name="key[]">"; echo "</td><td>产品:".$item['name']; echo "</td><td>单价:".$item['price']; echo "</td><td><input value=".$item['count']." name="value[]">"; $sum = $item['count']*$item['price']; echo "</td><td>合计:".round($sum,2); echo "</td><td><input onclick="\&quot;location='?action=remove&key=&quot;.$item['ID'].&quot;'\&quot;" type="button" value="删除">"; } echo "<input type="hidden" value="modi" name="action">"; echo "</td></tr><tr><td colspan="7"><input type="submit" value="提交查询内容">"; echo "</td></tr></tbody></table>";
  30. ?>
  31. <hr>
  32. <form action="tmp.php" method="post">
  33. ID:<input name="p[]">
  34. 品名:<input name="p[]">
  35. 单价:<input name="p[]">
  36. 数量:<input name="p[]">
  37. <input type="hidden" value="add" name="action">
  38. <input type="submit" value="提交查询内容">
  39. </form></count>