<?php
/**
* 购物车类
*/
session_start();
class Cart{ private static $ins = null;
private $items = array(); protected function __construct(){} // 获取实例
protected static function getIns(){
if(!(self::$ins instanceof self)){
self::$ins = new self();
}
return self::$ins;
} // 把购物车的单例对象放到session中
public static function getCart(){
if(!isset($_SESSION['cart']) || !($_SESSION['cart'] instanceof self)){
$_SESSION['cart'] = self::getIns();
}
return $_SESSION['cart'];
} /**
* 添加商品
* @param int $id 商品ID
* @param string $name 商品名称
* @param float $price 商品价格
* @param int $num 购买商品数量
*/
public function addItem($id,$name,$price,$num=1){
# 商品已经在购物中,就添加其数量
if($this->hasItem($id)){
$this->incCartNum($id,$num);
return true;
}
$this->items[$id] = array(
'id' => $id,
'name' => $name,
'price' => $price,
'num' => $num
);
return true;
} /**
* 清空购物车
*/
public function clearCart(){
$this->items = array();
} /**
* 判断一个商品是否存在
* @param int $id 商品ID
*/
public function hasItem($id){
return array_key_exists($id,$this->items);
} /**
* 修改购物车中的商品数量
* @param int $id 商品ID
* @param int $num 某个商品修改后的数量,即直接把某商品的数量改为$num
*/
public function modifyCartNum($id,$num=1){
if(!$this->hasItem($id)){
return false;
}
$this->items[$id]['num'] = $num;
} /**
* 商品数量增加1
*/
public function incCartNum($id,$num=1){
if($this->hasItem($id)){
$this->items[$id]['num'] += $num;
}
} /**
* 商品数量减少1
*/
public function decCartNum($id,$num=1){
if($this->hasItem($id)){
$this->items[$id]['num'] -= $num;
}
if($this->items[$id]['num'] < 1){
$this->deleteCartGoods($id);
}
} /**
* 删除商品
*/
public function deleteCartGoods($id){
return unset($this->items[$id]);
} /**
* 查询购物车商品种类的数量
*/
public function getCount(){
return count($this->items);
} /**
* 查询购物车商品的个数
*/
public function getGoodsNum(){
if($this->getCount == 0) return 0; $sum = 0;
foreach($this->items as $item){
$sum += $item['num'];
} return $sum;
} /**
* 查询购物车商品的总金额
*/
public function getGoodsPriceTotal(){
if($this->getCount == 0) return 0; $price = 0.0;
foreach($this->items as $item){
$price += $item['num']*$item['price'];
} return $price;
} /**
* 返回购物车的所有商品
*/
public function getCartList(){
if($this->getCount == 0) return false; return $this->items;
} }
?>

PHP购物车类的更多相关文章

  1. php之购物车类思路及代码

    <?php /* 购物车类 1.整站范围内,购物车--全局有效 解决:把购物车的信息,放在session里 2.既然全局有效,购物车的实例只有一个 解决:单例模式 技术选型:session+单例 ...

  2. PHP商城购物车类

    <?php /* 购物车类 */ // session_start(); class Cart { //定义一个数组来保存购物车商品 private $iteams; private stati ...

  3. JavaWeb后台购物车类的具体实现

    相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车: 就像我们平时去超市买东西一样,会推着购物车去买东西: 那么我们接下来看看jav ...

  4. 【Pro ASP.NET MVC 3 Framework】.学习笔记.7.SportsStore:购物车

    3 创建购物车 每个商品旁边都要显示Add to cart按钮.点击按钮后,会显示客户已经选中的商品的摘要,包括总金额.在购物车里,用户可以点击继续购物按钮返回product目录.也可以点击Check ...

  5. php中cookie+mysql实现的购物车代码

    <?php//购物车session的产生代码if(! $session && ! $scid) { /* session用来区别每一个购物车,相当于每个车的身份证号: scid只 ...

  6. php 购物车的例子

    网上搜到的,简单容易理解.cookie存购物车ID,db存购物车数据. //购物车session的产生代码   1 if(! $session && ! $scid) {    2 / ...

  7. Ajax实例-购物车

    一.概述 1.当添加或删除商品时,购物车会立即更新数据 2.思路: (1)建立商品类Item.java,存有商品属性name,prince,code(商品编码)等 (2)建立商品目录类Catalog. ...

  8. 购物车非cookie版

    2015.11.26购物车,非cookie版 [点击来,你发现被骗了(笑哭,笑哭,笑哭,源代码的话,留下邮箱吧,是在不好找这一时半会儿的.)] Jsp通过反射机制获取bean中的标签,但其实,可以没有 ...

  9. MVC 音乐商店 第 8 部分: 购物车与 Ajax 更新

    MVC 音乐商店是介绍,并分步说明了如何使用 ASP.NET MVC 和 Visual Studio 为 web 开发教程应用程序. MVC 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现 ...

随机推荐

  1. 简单C程序生成的汇编代码分析

    首先给出完整的C代码: int g(int x) { ; } int f(int x) { return g(x); } int main(void) { )+; } 使用命令:gcc –S –o h ...

  2. codeforces 724D(贪心)

    题目链接:http://codeforces.com/contest/724/problem/D 题意:给定一个字符串和一个数字m,选取一个一个子序列s,使得对于字符串中任意长度为m的子序列都至少含有 ...

  3. codeforces 721C (拓排 + DP)

    题目链接:http://codeforces.com/contest/721/problem/C 题意:从1走到n,问在时间T内最多经过多少个点,按路径顺序输出. 思路:比赛的时候只想到拓排然后就不知 ...

  4. LayaAir引擎——(三)

    LyaAir引擎(JavaScript)实现图片的翻转一半 图片4.png位于bin/开场过渡 文件夹下,图片大小150*30(根据实际情况做调整) var button; var scale1 = ...

  5. android view : 绘制

    说到绘制,其实就是如何把一个view的对象,变成手机上可视的图形.很多人总结3个过程:测量,布局,绘制.这也是所有的要显示图形的程序所应该抽象的3个步骤,测量就是测量出你view的大小,布局就是要显示 ...

  6. SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存

    SQLServer2012在登录远程服务器实例时报错:尝试读取或写入受保护的内存.这通常指示其它内存已损坏.(System.Data). 而登录本地数据库实例则能顺利登入,不存在上述问题. 试一试重置 ...

  7. 学android:直接用jdk来helloworld

    本文稍稍了解下java的编译机制, 以及试试纯粹的jdk来helloworld 在jdk安装位置的bin 目录下看看jdk的工具 有许多的jdk的工具吧,当然,和bin同级的目录下还有jre, lib ...

  8. Ubuntu W: GPG error: http://archive.ubuntukey....NO_PUBKEY 8D5A09

    在用 sudo apt-get update 时出现这样的报错: W: GPG error: http://archive.ubuntukylin.com:10006/ubuntukylin xeni ...

  9. ng-class的用法

    最近在学习angular框架,ng-class是angular框架的一个指令,这里是ng-class指令的官方解释: ng-class 指令用于给 HTML 元素动态绑定一个或多个 CSS 类. ng ...

  10. Beta版本测试报告

    爬虫测试: 由于爬虫是整个系统的数据来源,十分的重要,但是由于引用了jar包并且运行复杂,这里主要做功能性测试,通过增加seed,运行爬虫,可以在后台控制台看到日志的不断刷新以及数据库条目的不断增加, ...