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 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现 ...
随机推荐
- How can i use iptables save on centos 7?
I installed CentOS 7 with minimal configuration (os + dev tools). I am trying to open 80 port for ht ...
- 使用WP8最新的AudioVideoCaptureDevice类制作录像应用
WP8出来好一段时间了,新出的AudioVideoCaptureDevice类自定义功能比WP7的CaptureSource强大的多,但网上比较全面的中文实例还比较少,分享一个最近做的小实例给大家参考 ...
- 《HP大规模敏捷开发实践》读书笔记
读这本书的心得,敏捷是实践出来的,哪怕不懂srcum**等方法,只要坚持心中的价值观,朝一个方向改进,哪怕不能“任何时候都拥有符合发布要求的代码”,今天比昨天好,也是成功. 通过业务分析确定开 ...
- ASP.NET收发邮件
在.NET中常见到在线发邮件的实例,网站加上这个功能可以方便站长与用户的交流. NET 中发邮件有时候会用到IIS组件中的邮件服务器,不过复杂.对虚拟主机的配置也较麻烦, 也可用第三方组件比如Jmai ...
- java考核完的心得
2015年8月13日 星期四 晴 今天上午我们考核了java,就是用Java语言写一个小型的管理系统.考核前的我信心满满,因为我本身是测试专业的,觉得在开发这方面对自己不用要求的那么 ...
- SVN-Server搭建及配置
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion ...
- windows server2008 kettle部署
kettle部署需要有jdk环境,所以需要配置环境变量. 1.首先配置jdk,将jdk压缩包解压到c盘下 增加系统变量:JAVA_HOME:c:\jdk 在path后追加: %JAVA_HOME%\b ...
- hadoop 集群跑的时候用到hbasejar 文件的引用问题
1. 创建软连接 ln -s /home/hadoop/bigdater/hbase-0.98.6-cdh5.3.6/conf/hbase-site.xml ./hbase-site.xml(记得这里 ...
- 笔记 线程(threads)
线程:CPU使用的基本单元(线程ID.程序计数器.寄存器集合.栈). 多线程:一个进程有多个线程 多线程的优点: 增加响应度:当一个交互程序部分阻塞,该程序能继续执行 一个应用程序在同一地址空间有多个 ...
- 自学 PHP,如何不走弯路?
1.一本好书至关重要.如果这本书的知识非常深入,那么还是不要看了.对初学者来说只能是打击.因为很多东西都看不懂.一本知识较为浅显,并且说明非常详细,但是能让你上手的基础知识又非常完善的书籍就非常好.( ...