PHP实现的比较完善的购物车类


Posted in PHP onDecember 02, 2014

本文实例讲述了PHP实现的比较完善的购物车类。分享给大家供大家参考。具体实现方法如下:

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

<?php 

/*****************************************************************************/ 

/*                                                                           */ 

/* file type:      包含文件,建议后缀为.inc                                  */ 

/*                                                                           */ 

/* file name:      cart.inc                                                  */ 

/*                                                                           */ 

/* Description:    定义一个购车类                                            */ 

/*                                                                           */ 

/* Func list :     class cart                                                */ 

/*                                                                           */ 

/* author :        bigeagle                                                  */ 

/*                                                                           */ 

/*                                                                           */ 

/*****************************************************************************/ 

 

//定义本文件常量 

define("_CART_INC_" , "exists") ; 

 

/*购物车类*/ 

class TCart 

{ 

 

  var $SortCount;            //商品种类数 

  var $TotalCost;            //商品总价值 

 

  var $Id;                   //每类商品的ID(数组) 

  var $Name;                 //每类商品的名称(数组) 

  var $Price;                //每类商品的价格(数组) 

  var $Discount;             //商品的折扣(数组) 

  var $GoodPrice ;           //商品的优惠价格(数组) 

  var $Count;                //每类商品的件数(数组) 

  var $MaxCount ;            //商品限量(数组) 

 

  //******构造函数 

  function TCart() 

  { 

   $this->SortCount=0; 

 

   session_start(); //初始化一个session 

   session_register('sId'); 

   session_register('sName'); 

   session_register('sPrice'); 

   session_register('sDiscount'); 

   session_register('sGoodPrice') ; 

   session_register('sCount') ; 

   session_register('sMaxCount') ; 

 

   $this->Update(); 

   $this->Calculate(); 

  } 

 

  //********私有,根据session的值更新类中相应数据 

  function Update() 

  { 

    global $sId,$sName,$sPrice,$sCount,$sDiscount,$sMaxCount,$sGoodPrice; 

 

   if(!isset($sId) or !isset($sName) or !isset($sPrice) 

      or !isset($sDiscount) or !isset($sMaxCount) 

      or !isset($sGoodPrice) or !isset($sCount)) return; 

 

   $this->Id        =$sId; 

   $this->Name      =$sName; 

   $this->Price     =$sPrice; 

   $this->Count     =$sCount; 

   $this->Discount  = $sDiscount ; 

   $this->GoodPrice = $sGoodPrice ; 

   $this->MaxCount  = $sMaxCount ; 

 

   //计算商品总数 

   $this->SortCount=count($sId); 

 

  } 

 

  //********私有,根据新的数据计算每类商品的价值及全部商品的总价 

  function Calculate() 

  { 

   for($i=0;$i<$this->SortCount;$i++) 

   { 

     /*计算每件商品的价值,如果折扣是0 ,则为优惠价格*/ 

     $GiftPrice = ($this->Discount[$i] == 0 ? $this->GoodPrice : 

                   ceil($this->Price[$i] * $this->Discount[$i])/100 ); 

     $this->TotalCost += $GiftPrice * $this->Count[$i] ; 

   } 

  } 

 

  //**************以下为接口函数 

 

  //*** 加一件商品 

  // 判断是否蓝中已有,如有,加count,否则加一个新商品 

  //首先都是改session的值,然后再调用update() and calculate()来更新成员变量 

  function Add($a_ID , $a_Name , $a_Price , $a_Discount , 

               $a_GoodPrice , $a_MaxCount , $a_Count) 

  { 

   global $sId , $sName , $sCount , $sPrice , $sDiscount , 

          $sGoodPrice , $sMaxCount ; 

 

   $k=count($sId); 

   for ($i=0; $i<$k; $i++) 

   { //先找一下是否已经加入了这种商品 

     if($sId[$i]==$a_ID) 

     { 

      $sCount[$i] += $a_Count ; 

      break; 

     } 

   } 

   if($i >= $k) 

   { //没有则加一个新商品种类 

    $sId[]        = $a_ID; 

    $sName[]      = $a_Name; 

    $sPrice[]     = $a_Price; 

    $sCount[]     = $a_Count; 

    $sGoodPrice[] = $a_GoodPrice ; 

    $sDiscount[]  = $a_Discount ; 

    $sMaxCount[]  = $a_MaxCount ; 

   } 

 

   $this->Update(); //更新一下类的成员数据 

   $this->Calculate(); 

  } 

 

  //移去一件商品 

  function Remove($a_ID) 

  { 

   global $sId , $sName , $sCount , $sPrice , $sDiscount , 

          $sGoodPrice , $sMaxCount ; 

 

   $k = count($sId); 

   for($i=0; $i < $k; $i++) 

   { 

     if($sId[$i] == $a_ID) 

     { 

       $sCount[$i] = 0 ; 

       break; 

     } 

   } 

 

   $this->Update(); 

   $this->Calculate(); 

  } 

 

  //改变商品的个数 

  function ModifyCount($a_i,$a_Count) 

  { 

   global $sCount; 

 

   $sCount[$a_i] = $a_Count ; 

   $this->Update(); 

   $this->Calculate(); 

  } 

 

  /*************************** 

  清空所有的商品 

  *****************************/ 

  function RemoveAll() 

  { 

   session_unregister('sId'); 

   session_unregister('sName'); 

   session_unregister('sPrice'); 

   session_unregister('sDiscount'); 

   session_unregister('sGoodPrice') ; 

   session_unregister('sCount') ; 

   session_unregister('sMaxCount') ; 

   $this->SortCount = 0 ; 

   $this->TotalCost = 0 ; 

  } 

 

  //是否某件商品已在蓝内,参数为此商品的ID 

  function Exists($a_ID) 

  { 

   for($i=0; $i<$this->SortCount; $i++) 

   { 

     if($this->Id[$i]==$a_ID) return TRUE; 

   } 

   return FALSE; 

  } 

 

  //某件商品在蓝内的位置 

  function IndexOf($a_ID) 

  { 

   for($i=0; $i<$this->SortCount; $i++) 

   { 

    if($this->Id[$i]==$id) return $i; 

   } 

   return 0; 

  } 

 

  //取一件商品的信息,主要的工作函数 

  //返回一个关联数组, 

  function Item($i) 

  { 

   $Result[id]        = $this->Id[$i]; 

   $Result[name]      = $this->Name[$i]; 

   $Result[price]     = $this->Price[$i]; 

   $Result[count]     = $this->Count[$i]; 

   $Result[discount]  = $this->Discount[$i] ; 

   $Result[goodprice] = $this->GoodPrice[$i] ; 

   $Result[maxcount]  = $this->MaxCount[i] ; 

   return $Result; 

  } 

 

  //取总的商品种类数 

  function CartCount() 

  { 

   return $this->SortCount; 

  } 

 

  //取总的商品价值 

  function GetTotalCost() 

  { 

   return $this->TotalCost; 

  } 

}  

?>

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
php中批量替换文件名的实现代码
Jul 20 PHP
浅谈php serialize()与unserialize()的用法
Jun 05 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
header导出Excel应用示例
Jan 24 PHP
PHP 函数call_user_func和call_user_func_array用法详解
Mar 02 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
PHP简单选择排序算法实例
Jan 26 PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 PHP
Yii实现文章列表置顶功能示例
Oct 18 PHP
Laravel框架创建路由的方法详解
Sep 04 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 PHP
Yii框架关联查询with用法分析
Dec 02 #PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 #PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 #PHP
php页面函数设置超时限制的方法
Dec 01 #PHP
PHP实现抓取HTTPS内容
Dec 01 #PHP
php设置静态内容缓存时间的方法
Dec 01 #PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 #PHP
You might like
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
php数组转成json格式的方法
2015/03/09 PHP
php文件缓存方法总结
2016/03/16 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
IE图片缓存document.execCommand(&quot;BackgroundImageCache&quot;,false,true)
2011/03/01 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
JavaScript实现的SHA-1加密算法完整实例
2016/02/02 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
10款最好的Python开发编辑器
2019/07/03 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
教师群众路线剖析材料
2014/09/29 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
大学同学聚会感言
2015/07/30 职场文书
详解NodeJS模块化
2021/06/15 NodeJs