A-A+
php购物车完整类代码
记得13年的时候记得写过一个php小型的增删改查电商系统,里面其中就有商品的购物结算等系统,这几天一直在研究 ecshop 系统,当然也是跟电商打交道了,对了,之前写的系统是 夏日php电子商务系统 v0.2,这个系统一直没有更新,貌似现在也不兼容最新版了,当时只是为了帮助新手朋友学习php购物车类库的。
今天偶然遇到一个顾客想要一个简单的 php 购物车系统,不需要 ecshop 哪么强大复杂的,突然一下子不知道该怎么弄了,所以找到以前写的系统来参考一下,不过基本上还是用不上,从网上找了一个完整的 php 购物车类直接搞定了,这个 php购物车类实现了商品的添加,修改,删除,显示列表,以及各种计算的方法,采用了单一类的原理,稳定且容易扩展,好了,下面我们就来看看这个php购物车类吧。
php购物车类实例代码:
- /*******************************
- * author:www.xiariboke.net
- * date:2016 年 01 月 05 日
- *******************************/
- class Cart{
- static protected $ins; //实例变量
- public $item=array(); //放商品容器
- //禁止外部调用
- final protected function __construct(){}
- //禁止克隆
- final protected function __clone(){}
- //类内部实例化
- static protected function getIns(){
- if(!(self::$ins instanceof self)){self::$ins=new self();}return self::$ins;
- }
- //为了能使商品跨页面保存,把对象放入session里,这里为了防止冲突,设置了一个session后缀参数
- public static function getCat($sesSuffix='phpernote'){
- if(!isset($_SESSION['cat'.$sesSuffix])||!($_SESSION['cat'.$sesSuffix] instanceof self)){
- $_SESSION['cat'.$sesSuffix]=self::getIns();
- }
- return $_SESSION['cat'.$sesSuffix];
- }
- //入列时的检验,是否在$item里存在
- public function inItem($goods_id){
- if($this->getTypes()==0){
- return false;
- }
- //这里检验商品是否相同是通过goods_id来检测,并未通过商品名称name来检测,具体情况可做修改
- if(!(array_key_exists($goods_id,$this->item))){
- return false;
- }else{
- return $this->item[$goods_id]['num']; //返回此商品个数
- }
- }
- //添加一个商品
- /*
- * goods_id 唯一id
- * name 名称
- * num 数量
- * price 单价
- */
- public function addItem($goods_id,$name,$num,$price){
- if($this->inItem($goods_id)!=false){
- $this->item[$goods_id]['num']+=$num;
- return;
- }
- $this->item[$goods_id]=array(); //一个商品为一个数组
- $this->item[$goods_id]['num']=$num; //这一个商品的购买数量
- $this->item[$goods_id]['name']=$name; //商品名字
- $this->item[$goods_id]['price']=floatval($price); //商品单价
- }
- //减少一个商品
- public function reduceItem($goods_id,$num){
- if($this->inItem($goods_id)==false){
- return;
- }
- if($num>$this->getNum($goods_id)){
- unset($this->item[$goods_id]);
- }else{
- $this->item[$goods_id]['num']-=$num;
- }
- }
- //去掉一个商品
- public function delItem($goods_id){
- if($this->inItem($goods_id)){
- unset($this->item[$goods_id]);
- }
- }
- //返回购买商品列表
- public function itemList(){
- return $this->item;
- }
- //一共有多少种商品
- public function getTypes(){
- return count($this->item);
- }
- //获得一种商品的总个数
- public function getNum($goods_id){
- return $this->item[$goods_id]['num'];
- }
- // 查询购物车中有多少个商品
- public function getNumber(){
- $num=0;
- if($this->getTypes()==0){
- return 0;
- }
- foreach($this->item as $k=>$v){
- $num+=$v['num'];
- }
- return $num;
- }
- //计算总价格
- public function getPrice(){
- $price=0;
- if($this->getTypes()==0){
- return 0;
- }
- foreach($this->item as $k=>$v){
- $price+=floatval($v['num']*$v['price']);
- }
- return $price;
- }
- //清空购物车
- public function emptyItem(){
- $this->item=array();
- }
- }
php购物车类实例调用代码:
- <?php
- header("Content-type:text/html;charset=utf-8");
- session_start();
- $cart = Cart::getCat('_test');
- //cart经过一次实例化之后,任意页面都可以通过$_SESSION['cat_test']调用cart类的相关方法
- $_SESSION['cat_test']->addItem('1','苹果','1','8.03');
- $cart->addItem('2','香蕉','3','6.5');
- echo '<pre>';
- print_r($_SESSION);
- echo '获取购物车商品名称:'.$_SESSION['cat_test']->item[1]['name'],';',$_SESSION['cat_test']->item[2]['name'];
- echo '<br />';
- echo '购物车中共有商品总数:',$cart->getNumber();
- echo '<br />';
- echo '购物车中商品总价:',$_SESSION['cat_test']->getPrice();
- //session_destroy();
- //$_SESSION['cat_test']->emptyItem();
- ?>
这种php购物车类网上有许多,可以根据自己的需求进行二次开发,拿去测试吧,挺好玩的。
看你这个( 夏日php电子商务系统 v0.2)做的非常不错!