<?php//调用实例require_once 'cart.class.php';session_start();if(!isset($_SESSION['cart'])) {$_SESSION['cart'] = new Cart;}$cart =& $_SESSION['cart'];

if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='add') ){$p = $_POST['p'];$items = $cart->add($p);}if( ($_GET['action']=='remove')&&($_GET['key']!="") ) {$items = $cart->remove($_GET['key']);}

if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='modi') ){$key = $_POST['key'];$value = $_POST['value'];for($i=0;$i<count($key);$i  ){$items = $cart->modi($key[$i],$value[$i]); }}

$items = $cart->getCart();//打印echo "<table border=1>";setlocale(LC_MONETARY, 'it_IT');foreach($items as $item){echo "<tr><form method=\"post\" action=\"tmp.php\">";echo "<td>ID:".$item['ID']."<input type=hidden name=key[] value=".$item['ID'].">";echo "<td>产品:".$item['name'];echo "<td>单价:".$item['price'];echo "<td><input type=text name=value[] value=".$item['count'].">";$sum = $item['count']*$item['price'];echo "<td>合计:".round($sum,2);echo "<td><input type=button value='删除' οnclick=\"location='?action=remove&key=".$item['ID']."'\">";}echo "<input type=hidden name=action value=modi>";echo "<tr><td colspan=7><input type=submit />";echo "</td></form></tr></table>";

?><hr><form method="post" action="tmp.php">ID:<input type="text" name="p[]" />品名:<input type="text" name="p[]" />单价:<input type="text" name="p[]" />数量:<input type="text" name="p[]" /><input type=hidden name=action value=add><input type="submit" /></form>

<?/** * Cart *  * 购物车类 *  * @author  doodoo<pWtitle@yahoo.com.cn> * @package     Cart * @category    Cart * @license     PHP License * @access      public * @version     $Revision: 1.10 $*/Class Cart{

var $cart;var $totalCount; //商品总数量 var $totalPrices; //商品总金额

/**     * Cart Constructor     *      * 类的构造函数,使购物车保持稳定的初始化状态      *      * @static      * @access  public      * @return  void   无返回值     * @param   void   无参数*/function Cart(){$this->totalCount = 0;$this->totalPrice = 0;$this->cart = array(); }

// }}}    // {{{ add($item)

/** * 增加商品到当前购物车 *    * @access public    * @param  array $item 商品信息(一维数组:array(商品ID,商品名称,商品单价,商品数量))    * @return array   返回当前购物车内商品的数组*/function add($item){if(!is_array($item)||is_null($item)) return $this->cart;if(!is_numeric(end($item))||(!is_numeric(prev($item)))) {echo "价格和数量必须是数字";return $this->cart;  }reset($item); //这一句是必须的,因为上面的判断已经移动了数组的指标  $key = current($item);if($key=="") return $this->cart;if($this->_isExists($key)){  //商品是否已经存在?    $this->cart[$key]['count']  = end($item);return $this->cart;  }

$this->cart[$key]['ID']  = $key;$this->cart[$key]['name'] = next($item);$this->cart[$key]['price'] = next($item);$this->cart[$key]['count'] = next($item);

return $this->cart; }

// }}}    // {{{ add($item)

/** * 从当前购物车中取出部分或全部商品 * 当 $key=="" 的时候,清空当前购物车 * 当 $key!=""&&$count=="" 的时候,从当前购物车中拣出商品ID号为 $key 的全部商品  * 当 $key!=""&&$count!="" 的时候,从当前购物车中拣出 $count个 商品ID号为 $key 的商品  *    * @access public    * @param  string $key 商品ID    * @return mixed   返回真假或当前购物车内商品的数组*/function remove($key="",$count=""){if($key=="") {$this->cart = array();return true;  }if(!array_key_exists($key,$this->cart)) return false;if($count==""){ //移去这一类商品   unset($this->cart[$key]);  }else{ //移去$count个商品   $this->cart[$key]['count'] -= $count;if($this->cart[$key]['count']<=0) unset($this->cart[$key]);  }return $this->cart; }

// }}}    // {{{ modi($key,$value)

/** * 修改购物车内商品ID为 $key 的商品的数量为 $value *    * @access public    * @param  string $key 商品ID    * @param  int $value 商品数量    * @return array  返回当前购物车内商品的数组;*/function modi($key,$value){if(!$this->_isExists($key)) return $this->cart();  //不存在此商品,直接返回  if($value<=0){     // value 太小,全部删除   unset($this->cart[$key]);return $this->cart;  }$this->cart[$key]['count'] = $value;return $this->cart; }

/** * 返回当前购物车内商品的数组 *    * @access public    * @return array  返回当前购物车内商品的数组;*/function getCart(){return $this->cart; }

// }}}    // {{{ _isExists($key)

/** * 判断当前购物车中是否存在商品ID号为$key的商品 *    * @access private    * @param  string $key 商品ID    * @return bool   true or false;*/function _isExists($key)    {if(isset($this->cart[$key])&&!empty($this->cart[$key])&&array_key_exists($key,$this->cart))return true;return false;    }

// }}}    // {{{ isEmpty()

/** * 判断当前购物车是否为空,即没有任何商品 *    * @access public    * @return bool   true or false;*/function isEmpty(){return !count($this->cart); }

// }}}    // {{{ _stat()

/** * 取得部分统计信息 *    * @access private    * @return bool  true or false;*/function _stat(){if($this->isEmpty()) return false;foreach($this->cart as $item){$this->totalCount   = @end($item);$this->totalPrices  = @prev($item);  }return true; }

// }}}    // {{{ totalPrices()

/** * 取得当前购物车所有商品的总金额 *    * @access public    * @return float  返回金额;*/function totalPrices(){if($this->_stat())return $this->totalPrices;return 0; }

// }}}    // {{{ isEmpty()

/** * 取得当前购物车所有商品的总数量和 *    * @access public    * @return int ;*/function totalCount(){if($this->_stat())return $this->totalCount;  return 0; }

}//End Class Cart?>

转载于:https://www.cnblogs.com/c3055/archive/2011/08/24/2151649.html

[share]PHP购物车类的源码相关推荐

  1. 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment

    24 UsageEnvironment使用环境抽象基类--Live555源码阅读(三)UsageEnvironment 24 UsageEnvironment使用环境抽象基类--Live555源码阅读 ...

  2. 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )

    文章目录 一.调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 ) 二. 实时调度类 rt_sched_class 源码 一.调度类 ( 停机调度类 | 限期调度 ...

  3. PHP密码生成管理源码,php密码生成类(附源码)

    本节内容: 好用的php 密码生成类. 访代码实现的功能: 1,可设定密码长度. 2,可设定要生成的密码个数,批量生成. 3,可以指定密码的规则,字母,数字,特殊字符等. 1,密码生成类文件 Gene ...

  4. 12 哈希表相关类——Live555源码阅读(一)基本组件类

    12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...

  5. php强制cookies,php Cookies操作类(附源码)

    本cookies操作类的功能,包括: 1,保存,读取,更新,清除cookies数据. 2,可设置前缀. 3,强制超时控制. 4,cookies数据可以是字符串,数组,对象等. 1,PHP cookie ...

  6. 工商注册资质代办类网站源码 公司注册类网站织梦模板

    介绍: 工商注册资质代办类网站织梦模板公司注册类网站源码下载 本套织梦模板采用织梦内核开发的模板,这款模板使用范围极广,不仅仅局限于一类型的企业,你只需要把图片和产品内容换成你的即可,颜色都可以修改, ...

  7. hibernate 并发获取session失败 空指针_高并发之|通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程...

    核心逻辑概述 ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态. ThreadPoolExecu ...

  8. 最新好看的自适应手机版软件APP下载类网站源码,游戏软件应用网站源码,自适应手机端Pbootcms模板

    自适应手机软件APP下载类网站源码/游戏软件应用网站源码/自适应手机端 Pbootcms模板 测试环境:Linux  nginx1.18  PHP7.3 下载地址:自适应手机端软件APP下载网站源码 ...

  9. Java上帝类(Object类)源码总结(1)

    追根溯源,所有的java类都是Oject的子类,那么要进一步了解java,那么去探索Object类的源码就是不可避免的.这个神秘的Oject类里面是什么东东呢? package java.lang; ...

最新文章

  1. windows/linux计算文件 MD5值
  2. 科学家利用耳蜗植入物来测量脑电波来优化听力
  3. AI到底如何改变教育?好未来重金押注AI的背后逻辑
  4. Access-Ctrol-Allow-Headers:*兼容问题导致的跨域失败
  5. 请尽快升级到 Windows Vista - 因为你需要
  6. 代码编辑框控件_某游戏控件遍历
  7. 排除jar_通过IDEA快速定位和排除依赖冲突
  8. ADO+MFC数据库编程常用语句
  9. php open basedir配置,php下open_basedir的配置
  10. js实现上传文件实时显示缩略图
  11. 3月15日 卡尔曼与多元传感器融合
  12. python调用百度查询关键字_Python模拟搜索百度关键字
  13. 基于SRIO的FPGA与DSP间高速数据传输
  14. 主板检测卡c5_电脑主板检测卡代码大全
  15. 企业微信自建应用 网页授权登录 获取用户信息
  16. ico付费图标下载器 附带易语言源码
  17. 物联网传感技术——压电式传感器
  18. 【Configuration is still incorrect. Do you want to edit it again?】
  19. 全套汽车标志,好不容易找到的哦
  20. DFI(Deep/DynamicFlow Inspection,深度/动态流检测)

热门文章

  1. 实战脚本写入注册表,完善WindowsServer自动化运维
  2. MySQL---数据库从入门走向大神系列(十二)-构建MVC项目
  3. MSP430常见问题之FLASH存储类
  4. Git和Repo扫盲——如何取得Android源代码
  5. 《孙子兵法》十三篇注译(15--结束语)
  6. 宣武区政务网教育网的改造
  7. 信息系统项目管理师复习第3小时
  8. js实现数据结构及算法之二叉树(Binary Tree)
  9. 2017年英特尔在其数据中心业务和AI方面下大注
  10. 对Mapreduce代码进行单元测试