161
技術社區[雲棲]
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