PHP购物车实现的思路

<?php
/**
* 商品的基本属性,只要用户添加一任意一件商品放购物车,该类就会被实例化一次并且对象会保存到购物车里。
* @author hojust
*
*/
class Product extends Model{
//表名
protected $_table="product";
//主键名
protected $_key="id";  

//当前用户购买该商品的数量
private $quantity=1;
  
private $id;           //商品ID
private $name;         //名称
private $price;        //价格
private $image;      
/**
  * 根据商品ID从数据库中获取相关商品信息
  * @param $product_id 商品ID
  */
public function __construct($product_id){...}

/*
  *如果购买相同商品,该商品的数量相应增加
  */
public function incrementQuantity($quantity=1){...}


/**
  * 单个商品的价格(价格*数量)
  * @return float
  */
public function getTotal(){...}

/**
  * 获取缩略图片
  */
public function getSamllImage(){...}

public function getPrice() {...}

public function getName() {...}
...........
?>


<?php
/**
* 购物车类
* @author hojust
* 该购物车继承了PHP标准库的(ArrayObject)超类
* 它的主要功能就是把对象存放在一个protected类型的数组里面.在把购物车(Cart)对象保存到Session里
* 然后就可以能过Session获得购物车(Cart)对象,在通过用for或foreach输出所有商品对象
*
*/
class Cart extends ArrayObject{

//存放商品对象
protected $_product=array();
  
public function __construct(){
  parent::__construct($this->_product);
}

/**
  *  统计购物车里的所有商品的总价格
  *  @return float
  */
public function getCartTotal(){
  $sum=0;
  foreach($this as $product){
   //每件商品的单价
   $sum+=$product->getTotal();
  }
  return $sum;
}

/**
  *当用户购买了相同商品时,不保存商品对象,而是在原来的商品数量加1
  *@return boolean
  */
public function offsetSet($offset,$product){
  if( $this->offsetExists($offset) ){
   $this[$offset]->incrementQuantity(1);
   return true;
  }
  parent:offsetSet($offset,$product);
}
}
?>

<?php
//把商品添加到购物车里是相当简单
$cart=new Cart();
$cart[1]=new Product(1);
$cart[2]=new Product(2);
$cart[2]=new Product(2); //当下标一样时,购物车不会存储该对象,而是在原以存在的商品数量上加1
$cart[3]=new Product(3);

//把商品对象从购物车里读出来
foreach( $cart as $product){
   echo $product->getName();
   echo $product->getPrice();
   echo $product->getTotal();
}

echo $cart->getCartTotal();//所有商品的总价格。
?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值