采用单例模式写的购物车
session_start();
/**
*单例模式购物车(SESSION购物车)
*/
class CartTool{
private static $ins = null;
private $items = array();
public $rand = 0;
protected function __construct(){
header("Content-type: text/html; charset=utf-8");
$this->rand = mt_rand(1,99999);
}
/**
* 防止被复制
*/
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 $id 商品id
* @param $name 商品名称
* @param $price 商品价格
* @param $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 $id 商品主键
* @param int $num 某个商品修改后的数量,即直接把某商品的数量改为$num
* @return boolean
*/
public function modNum($id,$num=1){
if(!$this->hasItem($id)){
return false;
}
$this->items[$id]['num'] = $num;
}
/**
* 商品数量增加1
* @param $id int 商品主键
* @param $num int
*/
public function incNum($id,$num=1){
if($this->hasItem($id)){
$this->items[$id]['num'] +=$num;
}
}
/**
* 商品数量增加1
* @param $id 商品主键
* @param $num
*/
public function decNum($id,$num=1){
if($this->hasItem($id)){
$this->items[$id]['num'] -=$num;
}
//如果减少后,数量为0了,则把这个商品从购物车删掉
if($this->items[$id]['num']
$this->delItem($id);
}
}
/**
*删除商品
* @param $id
*/
public function delItem($id){
unset($this->items[$id]);
}
/**
* 判断商品是否存在
* @param $id 商品主键
* @return bool
*/
public function hasItem($id){
return array_key_exists($id,$this->items);
}
/**
* 商品种类
* @return int
*/
public function getCnt(){
return count($this->items);
}
/**
* 查询购物车中商品的个数
* @return int
*/
public function getNum(){
if($this->getCnt()==0){
return 0;
}
$sum=0;
foreach($this->items as $item){
$sum +=$item['num'];
}
return $sum;
}
/**
* 查询购物车中商品的总金额
* @return float|int
*/
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 getAll(){
return $this->items;
}
/**
* 清空购物车
*/
public function clear(){
$this->items = array();
}
}
//调用方法
$cart = CartTool::getCart();
$cart->addItem(1,'电脑',120,1);
$cart->addItem(2,'手机',500,1);
$cart->addItem(3,'平板',900,1);
print_r($cart->getAll());
?>
AD:真正免费,域名+虚机+企业邮箱=0元

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。