- 论坛徽章:
- 0
|
/************************
名称: 购物车类
作者:kevin 2005.7.5
描述:将session封装入一个简单的购物车类之中
每件商品要求具备id,name,price,count四个属性,
如果要加新的属性,请修改相应部分。
*************************/
class ShopCart {
var $SortCount; //商品种类数
var $TotalCost; //商品总价值
var $Id; //每类商品的ID(数组)
var $Name; //每类商品的名称(数组)
var $Price; //每类商品的价格(数组)
var $Count; //每类商品的件数(数组)
var $Cost; //每类商品的价值(数组)
//******构造函数
function ShopCart(){
$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-> rice=$sPrice;
$this->;Count=$sCount;
$this->;SortCount=count($sId);
}
//********私有,根据新的数据计算每类商品的价值及全部商品的总价
function Calculate(){
for($i=0;$i<$this->;SortCount;$i++){
$this->;Cost[$i]=$this-> rice[$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-> rice[$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
}
?>; |
|