购物车类

分析构造车:
1:你无论在本网站刷新了多少次次页面,或者新增了多少个商品,
都要求你查看购物车时,看到的都是一个一样的结果.

即:你打开A商品刷新,B商品刷新,首页,看到的购物车应该是一样的.

或者说:整站范围内,购物车--是全局有效的!

解决:把购物车的信息放在数据库,也可以放在session/cookie里

2:既然是全局有效,暗示,购物车的实例只能有1个!
不能说在3个页面,买了3个商品,就形成了3个购物车实例,这显然不合理.
解决:单例模式

技术选型: session+单例

功能分析:

判断某个商品是否存在
添加商品
删除商品
修改商品的数量

某商品数量加1
某商品数量减1

查询购物车的商品种类
查询购物车的商品数量
查询购物车里的商品总金额
返回购物里的所有商品

清空购物车

<?php

defined(‘ACC‘)||exit(‘Acc Deined‘);

class CartTool {
    private static $ins = null;
    private $items = array();

    final protected function __construct() {
    }

    final protected function __clone() {
    }

    // 获取实例
    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 商品主键
    param string $name 商品名称
    param float $price 商品价格
    param int $num 购物数量
    */
    public function addItem($id,$name,$price,$num=1) {

        if($this->hasItem($id)) { // 如果该商品已经存在,则直接加其数量
            $this->incNum($id,$num);
            return;
        }

        $item = array();
        $item[‘name‘] = $name;
        $item[‘price‘] = $price;
        $item[‘num‘] = $num;

        $this->items[$id] = $item;
    }

    /*
    修改购物车中的商品数量
    param int $id 商品主键
    param int $num 某个商品修改后的数量,即直接把某商品的数量改为$num
    */
    public function modNum($id,$num=1) {
        if(!$this->hasItem($id)) {
            return false;
        }

        $this->items[$id][‘num‘] = $num;

    }

    /*
    商品数量增加1
    */
    public function incNum($id,$num=1) {
        if($this->hasItem($id)) {
            $this->items[$id][‘num‘] += $num;
        }
    }

    /*
    商品数量减少1
    */
    public function decNum($id,$num=1) {
        if($this->hasItem($id)) {
            $this->items[$id][‘num‘] -= $num;
        }

        // 如果减少后,数量为0了,则把这个商品从购物车删掉
        if($this->items[$id][‘num‘] < 1) {
            $this->delItem($id);
        }
    }

    /*
        判断某商品是否存在
    */
    public function hasItem($id) {
        return array_key_exists($id,$this->items);
    }

    /*
        删除商品
    */
    public function delItem($id) {
        unset($this->items[$id]);
    }

    /*
        查询购物车中商品的种类
    */
    public function getCnt() {
        return count($this->items);
    }

    /*
        查询购物车中商品的个数
    */
    public function getNum() {
        if($this->getCnt() == 0) {
            return 0;
        }

        $sum = 0;

        foreach($this->items as $item) {
            $sum += $item[‘num‘];
        }

        return $sum;
    }

    /*
        查询购物车中商品的总金额
    */
    public function getPrice() {
        if($this->getCnt() == 0) {
            return 0;
        }

        $price = 0.0;

        foreach($this->items as $item) {
            $price += $item[‘num‘] * $item[‘price‘];
        }

        return $price;
    }

    /*
    返回购物车中的所有商品
    */

    public function all() {
        return $this->items;
    }

    /*
        清空购物车
    */
    public function clear() {
        $this->items = array();
    }
}

/*
session_start();

// print_r(CartTool::getCart());

$cart = CartTool::getCart();

if(!isset($_GET[‘test‘])) {
   $_GET[‘test‘] = ‘‘;
}

if($_GET[‘test‘] == ‘addwangba‘) {
    $cart->addItem(1,‘王八‘,23.4,1);
    echo ‘add wangba ok‘;
} else if($_GET[‘test‘] == ‘addfz‘) {
    $cart->addItem(2,‘方舟‘,2347.56,1);
    echo ‘add fangzhou ok‘;
} else if($_GET[‘test‘] == ‘clear‘) {
    $cart->clear();
} else if($_GET[‘test‘] == ‘show‘) {
    print_r($cart->all());
    echo ‘<br />‘;
    echo ‘共‘,$cart->getCnt(),‘种‘,$cart->getNum(),‘个商品<br />‘;
    echo ‘共‘,$cart->getPrice(),‘元‘;
} else {
    print_r($cart);
}
*/
?>
时间: 2024-11-04 12:29:46

购物车类的相关文章

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

php之购物车类思路及代码

<?php /* 购物车类 1.整站范围内,购物车--全局有效 解决:把购物车的信息,放在session里 2.既然全局有效,购物车的实例只有一个 解决:单例模式 技术选型:session+单例 功能分析 判断商品是否存在 添加商品 删除商品 修改商品的数量 某商品数量+1 某商品数量-1 查看购物车的商品种类 商品数量 商品的总金额 所有商品 清空购物车 */ session_start(); class CartTool { private static $ins = null; priva

购物车类2分析session+single

<?php /** * 购物车类分析 * 1.无论在网站刷新了多少次页面,或者新增加了多少个商品.打开购物车查看,看到的结果都市一样的 * 即,打开A商品刷新,打开B商品刷新,看到的购物车应该是一样的 * 整站范围内购物车是全局有效有的. * 解决:将购物车的信息放在数据库,也可以放在session里. * 2.购物车全局有效,即购物车的实例只能有一个 * 不能出现3个页面,,买3个商品,就形成了3个购物车实例 * 解决:单例模式 * * 技术支持:seesion+single * * 功能分析

购物车类分析session+single

<?php /** * 购物车类分析 * 1.无论在网站刷新了多少次页面,或者新增加了多少个商品.打开购物车查看,看到的结果都市一样的 * 即,打开A商品刷新,打开B商品刷新,看到的购物车应该是一样的 * 整站范围内购物车是全局有效有的. * 解决:将购物车的信息放在数据库,也可以放在session里. * 2.购物车全局有效,即购物车的实例只能有一个 * 不能出现3个页面,,买3个商品,就形成了3个购物车实例 * 解决:单例模式 * * 技术支持:seesion+single * * 功能分析

opencart中的购物车类

数据库的用户表customer中设置了一个cart字段,类型是text,这个字段保存当前用户的购物车信息. +-------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+------------

PHP实现商城购物车类(SESSION+单例模式 )(亲测)

1 <?php 2 if(!isset($_SESSION)) 3 session_start(); 4 //分析购物车 5 //整站范围内,购物车全局有效 6 //技术 : session购物车 + 单例模式 7 //增删商品,判断商品是否存在 8 //查询商品种类,数量,查询总金额,返回购物车所有商品 9 //某商品数量+1 -1 10 class CartTool{ 11 private static $ins = null; //实例保存 12 private $items = arra

实用的php购物车程序

实用的php教程购物车程序以前有用过一个感觉不错,不过看了这个感觉也很好,所以介绍给需要的朋友参考一下. <?php//调用实例require_once 'cart.class.php';session_start();if(!isset($_SESSION['cart'])) { $_SESSION['cart'] = new Cart;}$cart =& $_SESSION['cart']; if( ($_SERVER['REQUEST_METHOD']=="POST"

购物车模块

学习开发购物车模块 发现一个问题,如果web.xml中配置映射路径中/servlet/***,在serlet中,跳转的时候,会在路径中自动添加/servlet,这个真是非常的恶心.下次设置映射的时候,不加/servlet. 首先给出购买页.这里用静态页面. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = r

购物车

php 购物车实例 <?php if(! $session && ! $scid) {$session = md5(uniqid(rand()));SetCookie(scid, $session, time() + 14400);} class Cart { //开始购物车类 function check_item( $table, $session, $product) {$query = SELECT * FROM $table WHERE session=' $session