php之購物車類思路及代碼
<?php
/*
購物車類
1.整站範圍內,購物車--全局有效
解決:把購物車的信息,放在session裏
2.既然全局有效,購物車的實例隻有一個
解決:單例模式
技術選型:session+單例
功能分析
判斷商品是否存在
添加商品
刪除商品
修改商品的數量
某商品數量+1
某商品數量-1
查看購物車的商品種類
商品數量
商品的總金額
所有商品
清空購物車
*/
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() {
//如果cart在session不存在,並且 也不是當前自身類的實例,
//說明session裏沒有購物車
if(!isset($_SESSION['cart']) || !($_SESSION['cart'] instanceof self)) {
$_SESSION['cart'] = self::getIns();
}
return $_SESSION['cart'];
}
/*
添加商品
param int $id 商品主鍵
string $name 商品名稱
float $price 商品價格
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;
}
/*
修改購物車中的商品數量
int $id 商品主鍵
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) {
//種數為0,個數也為0
return 0;
}
$sum = 0;
foreach ($this->items as $item) {
$sum += $item['num'];
}
return $sum;
}
/*
購物車中商品的總金額
*/
public function getPrice() {
//數量為0,價錢為0
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();
}
}
//print_r(CartTool::getCart());
/* 測試*/
$cart = CartTool::getCart();
if (!isset($_GET['test'])) {
$_GET['test'] = '';
}
if ($_GET['test'] == 'addpm') {
$cart->addItem(1,'手機','1999',1);
echo "購買手機成功";
}elseif ($_GET['test'] == 'addfushi') {
$cart->addItem(2,'阿迪達斯','169',1);
echo '購買阿迪達斯成功';
} elseif ($_GET['test'] == 'clear') {
$cart->clear();
echo "購物車已清空";
}elseif ($_GET['test'] == 'show') {
print_r($cart->all());
echo "<br />";
echo '共'.$cart->getCnt().'種'.$cart->getNum().'個商品';
echo '共'.$cart->getPrice().'元';
} else{
print_r($cart);
}
?>
最後更新:2017-04-04 07:03:11