当前位置:首页 > PHP教程 > php类库 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-07-15 07:55:19 浏览: 评论:0 

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

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

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

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

Cart.class.php源码:

  1. <?php 
  2.  
  3. /** 
  4.  
  5.  * Cart 
  6.  
  7.  * 
  8.  
  9.  * 购物车类 
  10.  
  11.  * 
  12.  
  13.  * @author doodoo<pwtitle @yahoo.com.cn=""> 
  14.  
  15.  * @package  Cart 
  16.  
  17.  * @category Cart 
  18.  
  19.  * @license  PHP License 
  20.  
  21.  * @access  public 
  22.  
  23.  * @version  $Revision: 1.10 $ 
  24.  
  25.  */ 
  26.  
  27. Class Cart{ 
  28.  
  29.  var $cart
  30.  
  31.  var $totalCount//商品总数量 
  32.  
  33.  var $totalPrices//商品总金额 
  34.  
  35.  /** 
  36.  
  37.   * Cart Constructor 
  38.  
  39.   * 
  40.  
  41.   * 类的构造函数,使购物车保持稳定的初始化状态 
  42.  
  43.   * 
  44.  
  45.   * @static 
  46.  
  47.   * @access public 
  48.  
  49.   * @return void 无返回值 
  50.  
  51.   * @param void 无参数 
  52.  
  53.   */ 
  54.  
  55.  function Cart(){ 
  56.  
  57.  $this->totalCount = 0; 
  58.  
  59.  $this->totalPrice = 0; 
  60.  
  61.  $this->cart = array(); 
  62.  
  63.  } 
  64.  
  65.  // }}} 
  66.  
  67.  // {{{ add($item) 
  68.  
  69.  /** 
  70.  
  71.  * 增加商品到当前购物车 
  72.  
  73.  * 
  74.  
  75.  * @access public 
  76.  
  77.  * @param array $item 商品信息(一维数组:array(商品ID,商品名称,商品单价,商品数量)) 
  78.  
  79.  * @return array 返回当前购物车内商品的数组 
  80.  
  81.  */ 
  82.  
  83.  function add($item){ 
  84.  
  85.  if(!is_array($item)||is_null($item)) return $this->cart; 
  86.  
  87.  if(!is_numeric(end($item))||(!is_numeric(prev($item)))) { 
  88.  
  89.  echo "价格和数量必须是数字"
  90.  
  91.  return $this->cart; 
  92.  
  93.  } 
  94.  
  95.  reset($item); //这一句是必须的,因为上面的判断已经移动了数组的指标 
  96.  
  97.  $key = current($item); 
  98.  
  99.  if($key==""return $this->cart; 
  100.  
  101.  if($this->_isExists($key)){ //商品是否已经存在? 
  102.  
  103.  $this->cart[$key]['count'] = end($item); 
  104.  
  105.  return $this->cart; 
  106.  
  107.  } 
  108.  
  109.  $this->cart[$key]['ID'] = $key
  110.  
  111.  $this->cart[$key]['name'] = next($item); 
  112.  
  113.  $this->cart[$key]['price'] = next($item); 
  114.  
  115.  $this->cart[$key]['count'] = next($item); 
  116.  
  117.  return $this->cart; 
  118.  
  119.  } 
  120.  
  121.  // }}} 
  122.  
  123.  // {{{ add($item) 
  124.  
  125.  /** 
  126.  
  127.  * 从当前购物车中取出部分或全部商品 
  128.  
  129.  * 当 $key=="" 的时候,清空当前购物车 
  130.  
  131.  * 当 $key!=""&&$count=="" 的时候,从当前购物车中拣出商品ID号为 $key 的全部商品 
  132.  
  133.  * 当 $key!=""&&$count!="" 的时候,从当前购物车中拣出 $count个 商品ID号为 $key 的商品 
  134.  
  135.  * 
  136.  
  137.  * @access public 
  138.  
  139.  * @param string $key 商品ID 
  140.  
  141.  * @return mixed 返回真假或当前购物车内商品的数组 
  142.  
  143.  */ 
  144.  
  145.  function remove($key="",$count=""){ 
  146.  
  147.  if($key=="") { 
  148.  
  149.  $this->cart = array(); 
  150.  
  151.  return true; 
  152.  
  153.  } 
  154.  
  155.  if(!array_key_exists($key,$this->cart)) return false; 
  156.  
  157.  if($count==""){ //移去这一类商品 
  158.  
  159.  unset($this->cart[$key]); 
  160.  
  161.  }else//移去$count个商品 
  162.  
  163.  $this->cart[$key]['count'] -= $count
  164.  
  165.  if($this->cart[$key]['count']<=0) unset($this->cart[$key]); 
  166.  
  167.  } 
  168.  
  169.  return $this->cart; 
  170.  
  171.  } 
  172.  
  173.  // }}} 
  174.  
  175.  // {{{ modi($key,$value) 
  176.  
  177.  /** 
  178.  
  179.  * 修改购物车内商品ID为 $key 的商品的数量为 $value 
  180.  
  181.  * 
  182.  
  183.  * @access public 
  184.  
  185.  * @param string $key 商品ID 
  186.  
  187.  * @param int $value 商品数量 
  188.  
  189.  * @return array 返回当前购物车内商品的数组; 
  190.  
  191.  */ 
  192.  
  193.  function modi($key,$value){ 
  194.  
  195.  if(!$this->_isExists($key)) return $this->cart(); //不存在此商品,直接返回 
  196.  
  197.  if($value<=0){  // value 太小,全部删除 
  198.  
  199.  unset($this->cart[$key]); 
  200.  
  201.  return $this->cart; 
  202.  
  203.  } 
  204.  
  205.  $this->cart[$key]['count'] = $value
  206.  
  207.  return $this->cart; 
  208.  
  209.  } 
  210.  
  211.  /** 
  212.  
  213.  * 返回当前购物车内商品的数组 
  214.  
  215.  * 
  216.  
  217.  * @access public 
  218.  
  219.  * @return array 返回当前购物车内商品的数组; 
  220.  
  221.  */ 
  222.  
  223.  function getCart(){ 
  224.  
  225.  return $this->cart; 
  226.  
  227.  } 
  228.  
  229.  // }}} 
  230.  
  231.  // {{{ _isExists($key) 
  232.  
  233.  /** 
  234.  
  235.  * 判断当前购物车中是否存在商品ID号为$key的商品 
  236.  
  237.  * 
  238.  
  239.  * @access private 
  240.  
  241.  * @param string $key 商品ID 
  242.  
  243.  * @return bool true or false; 
  244.  
  245.  */ 
  246.  
  247.  function _isExists($key
  248.  
  249.  { 
  250.  
  251.  if(isset($this->cart[$key])&&!emptyempty($this->cart[$key])&&array_key_exists($key,$this->cart)) 
  252.  
  253.  return true; 
  254.  
  255.  return false; 
  256.  
  257.  } 
  258.  
  259.  // }}} 
  260.  
  261.  // {{{ isEmpty() 
  262.  
  263.  /** 
  264.  
  265.  * 判断当前购物车是否为空,即没有任何商品 
  266.  
  267.  * 
  268.  
  269.  * @access public 
  270.  
  271.  * @return bool true or false; 
  272.  
  273.  */ 
  274.  
  275.  function isEmpty(){ 
  276.  
  277.  return !count($this->cart); 
  278.  
  279.  } 
  280.  
  281.  // }}} 
  282.  
  283.  // {{{ _stat() 
  284.  
  285.  /** 
  286.  
  287.  * 取得部分统计信息 
  288.  
  289.  * 
  290.  
  291.  * @access private 
  292.  
  293.  * @return bool true or false; 
  294.  
  295.  */ 
  296.  
  297.  function _stat(){ 
  298.  
  299.  if($this->isEmpty()) return false; 
  300.  
  301.  foreach($this->cart as $item){ 
  302.  
  303.  $this->totalCount = @end($item); 
  304.  
  305.  $this->totalPrices = @prev($item); 
  306.  
  307.  } 
  308.  
  309.  return true; 
  310.  
  311.  } 
  312.  
  313.  // }}} 
  314.  
  315.  // {{{ totalPrices() 
  316.  
  317.  /** 
  318.  
  319.  * 取得当前购物车所有商品的总金额 
  320.  
  321.  * 
  322.  
  323.  * @access public 
  324.  
  325.  * @return float 返回金额; 
  326.  
  327.  */ 
  328.  
  329.  function totalPrices(){ 
  330.  
  331.  if($this->_stat()) 
  332.  
  333.  return $this->totalPrices; 
  334.  
  335.  return 0; 
  336.  
  337.  } 
  338.  
  339.  // }}} 
  340.  
  341.  // {{{ isEmpty() 
  342.  
  343.  /** 
  344.  
  345.  * 取得当前购物车所有商品的总数量和 
  346.  
  347.  * 
  348.  
  349.  * @access public 
  350.  
  351.  * @return int ; 
  352.  
  353.  */ 
  354.  
  355.  function totalCount(){ 
  356.  
  357.  if($this->_stat()) 
  358.  
  359.  return $this->totalCount; 
  360.  
  361.  return 0; 
  362.  
  363.  } 
  364.  
  365. }//End Class Cart 
  366.  
  367. ?> 

使用该类的方法:

  1. <?php 
  2.  
  3. header("Content-type:text/html;charset=utf8"); 
  4.  
  5. //调用实例 
  6.  
  7. require_once 'Cart.class.php'
  8.  
  9. session_start(); 
  10.  
  11. if(!isset($_SESSION['cart'])) { 
  12.  
  13.  $_SESSION['cart'] = new Cart; 
  14.  
  15.  
  16. $cart =& $_SESSION['cart']; 
  17.  
  18. if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='add') ){ 
  19.  
  20.  $p = $_POST['p']; 
  21.  
  22.  $items = $cart->add($p); 
  23.  
  24.  
  25. if( ($_GET['action']=='remove')&&($_GET['key']!="") ) { 
  26.  
  27.  $items = $cart->remove($_GET['key']); 
  28.  
  29.  
  30. if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='modi') ){ 
  31.  
  32.  $key = $_POST['key']; 
  33.  
  34.  $value = $_POST['value']; 
  35.  
  36.  for($i=0;$i<count ($key);$i="" $items="$cart-" ){="">modi($key[$i],$value[$i]); 
  37.  
  38.  } 
  39.  
  40.  
  41. $items = $cart->getCart(); 
  42.  
  43. //打印 
  44.  
  45. echo ""
  46.  
  47. setlocale(LC_MONETARY, 'it_IT'); 
  48.  
  49. foreach($items as $item){ 
  50.  
  51.  echo ""
  52.  
  53.  echo "<table border="1"><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>"
  54.  
  55. ?> 
  56.  
  57. <hr> 
  58.  
  59. <form action="tmp.php" method="post"
  60.  
  61. ID:<input name="p[]"
  62.  
  63. 品名:<input name="p[]"
  64.  
  65. 单价:<input name="p[]"
  66.  
  67. 数量:<input name="p[]"
  68.  
  69. <input type="hidden" value="add" name="action"
  70.  
  71. <input type="submit" value="提交查询内容"
  72.  
  73. </form></count>

Tags: PHP购物车类 Cart.class.php

分享到: