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 相关文章推荐
基于mysql的论坛(4)
Oct 09 PHP
php 无限分类的树类代码
Dec 03 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 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语法(1)
2006/10/09 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
php的socket编程详解
2016/11/20 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
js中小数转换整数的方法
2014/01/26 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
实例讲解Python3中abs()函数
2019/02/19 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
大学生农村教师实习自我鉴定
2013/09/21 职场文书
酒店管理专业毕业生推荐信
2013/11/10 职场文书
公司股份合作协议书
2014/12/07 职场文书
留学推荐信怎么写
2015/03/26 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL