PHP购物车类
<?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购物车类的更多相关文章
- php之购物车类思路及代码
<?php /* 购物车类 1.整站范围内,购物车--全局有效 解决:把购物车的信息,放在session里 2.既然全局有效,购物车的实例只有一个 解决:单例模式 技术选型:session+单例 ...
- PHP商城购物车类
<?php /* 购物车类 */ // session_start(); class Cart { //定义一个数组来保存购物车商品 private $iteams; private stati ...
- JavaWeb后台购物车类的具体实现
相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车: 就像我们平时去超市买东西一样,会推着购物车去买东西: 那么我们接下来看看jav ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.7.SportsStore:购物车
3 创建购物车 每个商品旁边都要显示Add to cart按钮.点击按钮后,会显示客户已经选中的商品的摘要,包括总金额.在购物车里,用户可以点击继续购物按钮返回product目录.也可以点击Check ...
- php中cookie+mysql实现的购物车代码
<?php//购物车session的产生代码if(! $session && ! $scid) { /* session用来区别每一个购物车,相当于每个车的身份证号: scid只 ...
- php 购物车的例子
网上搜到的,简单容易理解.cookie存购物车ID,db存购物车数据. //购物车session的产生代码 1 if(! $session && ! $scid) { 2 / ...
- Ajax实例-购物车
一.概述 1.当添加或删除商品时,购物车会立即更新数据 2.思路: (1)建立商品类Item.java,存有商品属性name,prince,code(商品编码)等 (2)建立商品目录类Catalog. ...
- 购物车非cookie版
2015.11.26购物车,非cookie版 [点击来,你发现被骗了(笑哭,笑哭,笑哭,源代码的话,留下邮箱吧,是在不好找这一时半会儿的.)] Jsp通过反射机制获取bean中的标签,但其实,可以没有 ...
- MVC 音乐商店 第 8 部分: 购物车与 Ajax 更新
MVC 音乐商店是介绍,并分步说明了如何使用 ASP.NET MVC 和 Visual Studio 为 web 开发教程应用程序. MVC 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现 ...
随机推荐
- BackTrack5-r3改源
默认源服务器是国外的,更新起来会很慢,所以要改成国内的. 所需要的文件包地址:http://pan.baidu.com/s/1i3ouc9v(64位更新包)进入BT系统图形模式-将(语言选择器)文件拖 ...
- Cisco ASA使用证书加密
使用ASDM配置HTTPS证书加密anyconnect连接 一.在没有使用证书的情况下每次连接VPN都会出现如下提示 ASA Version: 8.4.(1) ASDM Version: 6.4.(7 ...
- js高级编程中命名空间的两种用法
第一种:// 声明一个全局对象Namespace,用来注册命名空间Namespace = new Object();// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Gr ...
- (转)C#实现MD5加密
首先,先简单介绍一下MD5 MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和r ...
- LaTeX_fleqn参数时,多行公式对齐居中的同时选择性的加编号
[转载请注明出处]http://www.cnblogs.com/mashiqi 2016/10/20 一年多没写博文了.今天写一个短的,记录一下使用LaTeX的一些经验. 有些时候,我们的latex文 ...
- 数组循环:循环多个li 每个li 固定N条数据
PHP代码: $arr = array(1,2,3,4,5,6,7); $x = 1; $y = 0; foreach($arr as $k => $v){ $data[$y][] = $v; ...
- 转载《Android LayoutInflater详解》
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
- angular2-aot-webpack 生产环境下编译angular2
这里讲讲,angular2在生产模式下用webpack2进行打包的方法: //使用rollup打包还是比较坑的,功能及插件上都不如webpack, 关键不支持代码分离,导致angular里的lazy ...
- LINUX测试环境部署manggo(六)
安装配置manggo 复制安装包mongodb-linux-x86_64-2.6.5.tgz到/usr/local/目录下,或者如果有网络可以直接使用wget命令下载安装包到/usr/local目录下 ...
- Quartus II 增量编译
在开发阶段,经常需要改代码,而且往往只改局部代码,但是编译的时候,通常会全部重新编译,这会很浪费时间,使得开发效率大大降低.那么有没有一种方法能够降低不必要的编译时间呢?通过查询Quartus II ...