<?php
/**
* 购物车类分析
* 1.无论在网站刷新了多少次页面,或者新增加了多少个商品。打开购物车查看,看到的结果都市一样的
* 即,打开A商品刷新,打开B商品刷新,看到的购物车应该是一样的
* 整站范围内购物车是全局有效有的。
* 解决:将购物车的信息放在数据库,也可以放在session里。
* 2.购物车全局有效,即购物车的实例只能有一个
* 不能出现3个页面,,买3个商品,就形成了3个购物车实例
* 解决:单例模式
*
* 技术支持:seesion+single
*
* 功能分析:
* 判断某个商品是否存在
* 添加商品
* 删除商品
* 修改商品的数量
*
* 某商品数量+1
* 某商品数量-1
*
* 查询购物车的商品种类
* 查询购物车的商品数量
* 查询购物车的商品总金额
* 返回购物车里的所有商品
* 清空购物车
*/
session_start();//使用session必须开启session
class CartTool{
//此处要要到单例模式
private static $ins = null;
private $items = array();//用空数组存储商品
public $single = 0;//测试用代码
//构造方法受保护
protected function __construct(){
$this->single = mt_rand(1,10000);//测试代码
}
//获取实例。开发一个方法供外部调用
public static function getIns(){
//判断$ins是否是自身的实例
// if(!(self::$ins instanceof self)){
if(self::$ins === null){//若属性为null则是第一次访问
self::$ins = new self();
}
return self::$ins;
}
//将购物车的单例对象放到session里面
public static function getCart(){
//sessoin里面没有购物车,或者不是session里面的实例
if(!isset($_SESSION['cart']) || !($_SESSION['cart'] instanceof self)){
$_SESSION['cart'] = self::getIns();
}
return $_SESSION['cart'];
}
}
//随意更换地址后的数据如果一致,说明single+session已经实现。
//整个网站都共享这一个实例。全局有效+单例
print_r(CartTool::getCart());//测试用代码