将session封装入一个简单的购物车类之中

将session封装入一个简单的购物车类之中

<?php

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

将session封装入一个简单的购物车类之中,
请参考PHP学习记录的相应文章。

每件商品要求具备id,name,price,count四个属性,
如果你要加新的属性,请修改相应部分。

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

class TCart {

  var 
$SortCount//商品种类数
  
var $TotalCost//商品总价值
  
  
var $Id;        //每类商品的ID(数组)
  
var $Name;        //每类商品的名称(数组)
  
var $Price;        //每类商品的价格(数组)
  
var $Count;        //每类商品的件数(数组)
  
var $Cost;        //每类商品的价值(数组)

  
  //******构造函数
  
function TCart(){
    
$this->SortCount=0;
    
    
session_start();    //初始化一个session
    
session_register('sId');
    
session_register('sName');
    
session_register('sPrice');
    
session_register('sCount');
    
    
$this->Update();
    
$this->Calculate();
    
  }
  
  
//********私有,根据session的值更新类中相应数据
  
function Update(){
    global 
$sId,$sName,$sPrice,$sCount;
    
    if(!isset(
$sId) or !isset($sName) or !isset($sPrice)) return;
    
    
$this->Id=$sId;
    
$this->Name=$sName;
    
$this->Price=$sPrice;
    
$this->Count=$sCount;
    
    
$this->SortCount=count($sId);
    
  }
  
  
//********私有,根据新的数据计算每类商品的价值及全部商品的总价
  
function Calculate(){
   for(
$i=0;$i<$this->SortCount;$i++){
     
$this->Cost[$i]=$this->Price[$i]*$this->Count[$i];
     
$this->TotalCost += $this->Cost[$i];
   }
  }
  
 
 
//**************以下为接口函数
  
 //*** 加一件商品
 // 判断是否蓝中已有,如有,加count,否则加一个新商品
 //首先都是改session的值,然后再调用update() and calculate()来更新成员变量
  
function AddOne($id,$na,$pr){
    global 
$sId,$sName,$sPrice,$sCount;
    
    
$k=count($sId);
    for(
$i=0;$i<$k;$i++){ //先找一下是否已经加入了这种商品
      
if($sId[$i]==$id){
       
$sCount[$i]++;
       break;
      }
    }
    if(
$i>=$k){   //没有则加一个新商品种类
      
$sId[]=$id;
      
$sName[]=$na;
      
$sPrice[]=$pr;
      
$sCount[]=1;
    }
    
    
$this->Update();    //更新一下类的成员数据
    
$this->Calculate();
  }
 
 
//移去一件商品
  
function RemoveOne($id){
    global 
$sId,$sName,$sPrice,$sCount;
    
    
$k=count($sId);
    for(
$i=0;$i<$k;$i++){
      if(
$sId[$i]==$id){
       
$sCount[$i]--;
       break;
      }
    }
    
    
$this->Update();
    
$this->Calculate();
  }
  
  
//改变商品的个数
  
function ModifyCount($i,$ncount){
   global 
$sCount;
      
   
$sCount[$i]=$ncount;
  
   
$this->Update();
   
$this->Calculate();
  
  }
  
  
//清空一种商品
  
function EmptyOne($i){
   global 
$sCount;
  
   
$sCount[$i]=0;
      
   
$this->Update();
   
$this->Calculate();
  }
  
  
  
/***************************
  清空所有的商品
  
  因为在win里PHP不支持session_destroy()函数,所以这个清空函数不完善,
  只是把每种商品的个数置为0。
  如果是在linux下,可以直接用session_destroy()来做。
  *****************************/
  
function EmptyAll(){
    global 
$sId,$sName,$sPrice,$sCount;
    
    
$k=count($sId);
    for(
$i=0;$i<$k;$i++){
       
$sCount[$i]=0;
    }
    
    
$this->Update();
    
$this->Calculate();
    
    
session_unregister('sId');
    
session_unregister('sName');
    
session_unregister('sPrice');
    
session_unregister('sCount');
    
    
$this->SortCount=0;
    
  }
  
  
//是否某件商品已在蓝内,参数为此商品的ID
  
function InCart($id){
    for(
$i=0;$i<$this->SortCount;$i++){
      if(
$this->Id[$i]==$id) return TRUE;
    }
    return 
FALSE;
  }
  
  
//某件商品在蓝内的位置
  
function IndexOf($id){
    for(
$i=0;$i<$this->SortCount;$i++){
      if(
$this->Id[$i]==$id) return $i;
    }
    return 
0;
  }
  
  
//取一件商品的信息,主要的工作函数
  //返回一个关联数组,下标分别对应 id,name,price,count,cost
  
function GetOne($i){
    
$Result[id]=$this->Id[$i];
    
$Result[name]=$this->Name[$i];
    
$Result[price]=$this->Price[$i];
    
$Result[count]=$this->Count[$i];
    
$Result[cost]=$this->Cost[$i];
    
    return 
$Result;
  }
  
  
//取总的商品种类数
  
function GetSortCount(){
    return 
$this->SortCount;
  }
  
  
//取总的商品价值
  
function GetTotalCost(){
    return 
$this->TotalCost;
  }
  
//end class 
}

?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值