<转>php 购物车代码实例
<?php
if (!isset($_SESSION)) {
session_start();
}
//购物车类,单例模式,全站只有一个
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() {
//如果不存在,或者session内容不是本类实例,就实例一遍
//如果存在了,就不会再走这里了,session唯一的目的也就达到了
if (!isset($_SESSION['cart']) || !($_SESSION['cart'] instanceof self)) {
//将实例结果赋给session
$_SESSION['cart'] = self::getIns();
}
//返回session(实例结果,即对象)
return $_SESSION['cart'];
}
/**
添加商品 addItem
param int $id 商品id主键
param string $name 商品名称
param float $price 商品价格
param int $num 购物数量
将商品信息赋值给购物车items数组中,以ID为下标
*/
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;
//将items变成一个二维数组,以主键/$id 为下标
$this->items[$id] = $item;
}
/**
修改购物车的商品数量
param int $id 商品主键
param int $num 某个商品修改的数量,直接把商品替换覆盖
*/
public function modNum($id,$num=1) {
//如果这个商品不存在,直接false
if (!$this->hasItem($id)) {
return false;
}
$this->items[$id]['num'] = $num;
}
/**
商品数量增加,默认是一 incNum
*/
public function incNum($id,$num=1) {
if ($this->hasItem($id)) {
$this->items[$id]['num'] += $num;
}
}
/**
商品数量减少,默认是一 decNum
*/
public function decNum($id,$num=1) {
if ($this->hasItem($id)) {
$this->items[$id]['num'] -= $num;
}
//减少到数量为0,则直接把商品删除
if ($this->items[$id]['num'] < 0) {
$this->delItem[$id];
}
}
/**
删除商品
*/
public function delItem($id) {
unset($this->items[$id]);
}
/**
判断商品是否存在 hasItem()
return bool 商品是否存在于items(二维数组)中,用$id来判断;
*/
public function hasItem($id) {
return array_key_exists($id, $this->items);
}
/**
判断购物车里商品的种类
return int 总类
*/
public function getCnt(){
return count($this->items);
}
/**
判断购物车里商品数量
return int $sum总数
*/
public function getNum(){
//如果种类为0,商品自然也为0
if ($this->getCnt() == 0) {
return 0;
}
//初始化数量
$sum = 0;
//遍历计算出商品数量
foreach ($this->items as $item) {
$sum += $item['num'];
}
return $sum;
}
/**
计算出商品总额getPrice()
return float 总额
*/
public function getPrice(){
if ($this->getCnt() == 0) {
return 0;
}
//初始化成浮点型
$price = 0.0;
//遍历出价格和数量,算出总额
foreach ($this->items as $item) {
$price += $item['num'] * $item['price'];
}
return $price;
}
/**
返回购物车中的所有商品 allGoods()
return int 所有商品
*/
public function allGoods(){
return $this->items;
}
/**
清空购物车
*/
public function clear() {
//将商品初始化为空数组
$this->items = array();
}
}
// print_r(CartTool::getCart());
?>
posted on 2015-11-11 22:16 hahahahahai12 阅读(124) 评论(0) 收藏 举报
浙公网安备 33010602011771号