[share]PHP购物车类的源码
<?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购物车类的源码相关推荐
- 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment
24 UsageEnvironment使用环境抽象基类--Live555源码阅读(三)UsageEnvironment 24 UsageEnvironment使用环境抽象基类--Live555源码阅读 ...
- 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )
文章目录 一.调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 ) 二. 实时调度类 rt_sched_class 源码 一.调度类 ( 停机调度类 | 限期调度 ...
- PHP密码生成管理源码,php密码生成类(附源码)
本节内容: 好用的php 密码生成类. 访代码实现的功能: 1,可设定密码长度. 2,可设定要生成的密码个数,批量生成. 3,可以指定密码的规则,字母,数字,特殊字符等. 1,密码生成类文件 Gene ...
- 12 哈希表相关类——Live555源码阅读(一)基本组件类
12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...
- php强制cookies,php Cookies操作类(附源码)
本cookies操作类的功能,包括: 1,保存,读取,更新,清除cookies数据. 2,可设置前缀. 3,强制超时控制. 4,cookies数据可以是字符串,数组,对象等. 1,PHP cookie ...
- 工商注册资质代办类网站源码 公司注册类网站织梦模板
介绍: 工商注册资质代办类网站织梦模板公司注册类网站源码下载 本套织梦模板采用织梦内核开发的模板,这款模板使用范围极广,不仅仅局限于一类型的企业,你只需要把图片和产品内容换成你的即可,颜色都可以修改, ...
- hibernate 并发获取session失败 空指针_高并发之|通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程...
核心逻辑概述 ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态. ThreadPoolExecu ...
- 最新好看的自适应手机版软件APP下载类网站源码,游戏软件应用网站源码,自适应手机端Pbootcms模板
自适应手机软件APP下载类网站源码/游戏软件应用网站源码/自适应手机端 Pbootcms模板 测试环境:Linux nginx1.18 PHP7.3 下载地址:自适应手机端软件APP下载网站源码 ...
- Java上帝类(Object类)源码总结(1)
追根溯源,所有的java类都是Oject的子类,那么要进一步了解java,那么去探索Object类的源码就是不可避免的.这个神秘的Oject类里面是什么东东呢? package java.lang; ...
最新文章
- windows/linux计算文件 MD5值
- 科学家利用耳蜗植入物来测量脑电波来优化听力
- AI到底如何改变教育?好未来重金押注AI的背后逻辑
- Access-Ctrol-Allow-Headers:*兼容问题导致的跨域失败
- 请尽快升级到 Windows Vista - 因为你需要
- 代码编辑框控件_某游戏控件遍历
- 排除jar_通过IDEA快速定位和排除依赖冲突
- ADO+MFC数据库编程常用语句
- php open basedir配置,php下open_basedir的配置
- js实现上传文件实时显示缩略图
- 3月15日 卡尔曼与多元传感器融合
- python调用百度查询关键字_Python模拟搜索百度关键字
- 基于SRIO的FPGA与DSP间高速数据传输
- 主板检测卡c5_电脑主板检测卡代码大全
- 企业微信自建应用 网页授权登录 获取用户信息
- ico付费图标下载器 附带易语言源码
- 物联网传感技术——压电式传感器
- 【Configuration is still incorrect. Do you want to edit it again?】
- 全套汽车标志,好不容易找到的哦
- DFI(Deep/DynamicFlow Inspection,深度/动态流检测)