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 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现 ...
随机推荐
- ios初级必看视频
http://pan.baidu.com/share/link?shareid=3315997225&uk=4113970285
- linux cron计划任务
说明:Crontab是Linux系统中在固定时间执行某一个程序的工具,类似于Windows系统中的任务计划程序 下面通过详细实例来说明在Linux系统中如何使用Crontab 操作系统:CentOS ...
- css实现隐藏显示
<head> <meta http-equiv="content-type" content="text/html;charset=utf-8" ...
- CTO干点啥?
1.负责技术 2.负责人才 3.负责业务(需求) 4.负责组织
- iOS UIPickerView 显示全国省市
效果图 #import "ViewController.h" @interface ViewController () @property(strong,nonatomic)UIP ...
- Android HandlerThread 的使用及其Demo (转)
转自http://www.cnblogs.com/hnrainll/p/3597246.html 介绍 首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现同时完成多 ...
- 关于struts和Spring 结合到一起之后存在ACtion创建单实例还是多
struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象.原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面 ...
- android插件中或者library中获取asstes文件
在插件中或者library的项目中把文件放在asstes,不能用context.getResources().getAssets().open(fileName)读取到流,会报FileNotFound ...
- Mysql使用mysqldump按时间导出时的一个注意事项
在使用Mysql的mysqldump命令按时间进行数据导出时,我们可能会遇到导出数据与原库中不符或者导出数据和我们期望的数据不同的情况. 我们知道Mysql数据库导出可以使用命令mysqldump,使 ...
- selenium 常见问题整理。
一:日期控件 selenium不能直接对日期控件操作,可以通过js对日期控件做赋值操作 WebElement inputTimeBox=driver.findElement(by.name(" ...