-
PHP实现的比较完善的购物车类
这篇文章主要介绍了PHP实现的比较完善的购物车类,包含了针对商品常见的增加、删除与修改等功能,非常具有实用价值,需要的朋友可以参考下
本文实例讲述了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程序设计有所帮助。
出处:http://www.phpfensi.com/php/20210501/14751.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式