A-A+

php购物车完整类代码

2016年01月05日 PHP技术文章 评论 1 条 阅读 15 views 次

记得13年的时候记得写过一个php小型的增删改查电商系统,里面其中就有商品的购物结算等系统,这几天一直在研究 ecshop 系统,当然也是跟电商打交道了,对了,之前写的系统是 夏日php电子商务系统 v0.2,这个系统一直没有更新,貌似现在也不兼容最新版了,当时只是为了帮助新手朋友学习php购物车类库的。

今天偶然遇到一个顾客想要一个简单的 php 购物车系统,不需要 ecshop 哪么强大复杂的,突然一下子不知道该怎么弄了,所以找到以前写的系统来参考一下,不过基本上还是用不上,从网上找了一个完整的 php 购物车类直接搞定了,这个 php购物车类实现了商品的添加,修改,删除,显示列表,以及各种计算的方法,采用了单一类的原理,稳定且容易扩展,好了,下面我们就来看看这个php购物车类吧。

php购物车类实例代码:

  1. /******************************* 
  2. * author:www.xiariboke.net 
  3. * date:2016 年 01 月 05 日 
  4. *******************************/  
  5. class Cart{  
  6.     static protected $ins//实例变量  
  7.     public $item=array(); //放商品容器  
  8.     //禁止外部调用  
  9.     final protected function __construct(){}  
  10.     //禁止克隆  
  11.     final protected function __clone(){}  
  12.     //类内部实例化  
  13.     static protected function getIns(){  
  14.         if(!(self::$ins instanceof self)){self::$ins=new self();}return self::$ins;  
  15.     }  
  16.     //为了能使商品跨页面保存,把对象放入session里,这里为了防止冲突,设置了一个session后缀参数  
  17.     public static function getCat($sesSuffix='phpernote'){  
  18.         if(!isset($_SESSION['cat'.$sesSuffix])||!($_SESSION['cat'.$sesSuffix] instanceof self)){  
  19.             $_SESSION['cat'.$sesSuffix]=self::getIns();  
  20.         }  
  21.         return $_SESSION['cat'.$sesSuffix];  
  22.     }  
  23.     //入列时的检验,是否在$item里存在  
  24.     public function inItem($goods_id){  
  25.         if($this->getTypes()==0){  
  26.             return false;  
  27.         }  
  28.         //这里检验商品是否相同是通过goods_id来检测,并未通过商品名称name来检测,具体情况可做修改  
  29.         if(!(array_key_exists($goods_id,$this->item))){  
  30.             return false;  
  31.         }else{  
  32.             return $this->item[$goods_id]['num']; //返回此商品个数  
  33.         }  
  34.     }  
  35.     //添加一个商品  
  36.     /* 
  37.     * goods_id 唯一id 
  38.     * name 名称 
  39.     * num 数量 
  40.     * price 单价 
  41.     */  
  42.     public function addItem($goods_id,$name,$num,$price){  
  43.         if($this->inItem($goods_id)!=false){  
  44.             $this->item[$goods_id]['num']+=$num;  
  45.             return;  
  46.         }  
  47.         $this->item[$goods_id]=array(); //一个商品为一个数组  
  48.         $this->item[$goods_id]['num']=$num//这一个商品的购买数量  
  49.         $this->item[$goods_id]['name']=$name//商品名字  
  50.         $this->item[$goods_id]['price']=floatval($price); //商品单价  
  51.     }  
  52.     //减少一个商品  
  53.     public function reduceItem($goods_id,$num){  
  54.         if($this->inItem($goods_id)==false){  
  55.             return;  
  56.         }  
  57.         if($num>$this->getNum($goods_id)){  
  58.             unset($this->item[$goods_id]);  
  59.         }else{  
  60.             $this->item[$goods_id]['num']-=$num;  
  61.         }  
  62.     }  
  63.     //去掉一个商品  
  64.     public function delItem($goods_id){  
  65.         if($this->inItem($goods_id)){  
  66.             unset($this->item[$goods_id]);  
  67.         }  
  68.     }  
  69.     //返回购买商品列表  
  70.     public function itemList(){  
  71.         return $this->item;  
  72.     }  
  73.     //一共有多少种商品  
  74.     public function getTypes(){  
  75.         return count($this->item);  
  76.     }  
  77.     //获得一种商品的总个数  
  78.     public function getNum($goods_id){  
  79.         return $this->item[$goods_id]['num'];  
  80.     }  
  81.     // 查询购物车中有多少个商品  
  82.     public function getNumber(){  
  83.         $num=0;  
  84.         if($this->getTypes()==0){  
  85.             return 0;  
  86.         }  
  87.         foreach($this->item as $k=>$v){  
  88.             $num+=$v['num'];  
  89.         }  
  90.         return $num;  
  91.     }  
  92.     //计算总价格  
  93.     public function getPrice(){  
  94.         $price=0;  
  95.         if($this->getTypes()==0){  
  96.             return 0;  
  97.         }  
  98.         foreach($this->item as $k=>$v){  
  99.             $price+=floatval($v['num']*$v['price']);  
  100.         }  
  101.         return $price;  
  102.     }  
  103.     //清空购物车  
  104.     public function emptyItem(){  
  105.         $this->item=array();  
  106.     }  
  107. }  

php购物车类实例调用代码:

  1. <?php  
  2. header("Content-type:text/html;charset=utf-8");  
  3. session_start();  
  4. $cart = Cart::getCat('_test');  
  5. //cart经过一次实例化之后,任意页面都可以通过$_SESSION['cat_test']调用cart类的相关方法  
  6. $_SESSION['cat_test']->addItem('1','苹果','1','8.03');  
  7. $cart->addItem('2','香蕉','3','6.5');  
  8. echo '<pre>';  
  9. print_r($_SESSION);  
  10. echo '获取购物车商品名称:'.$_SESSION['cat_test']->item[1]['name'],';',$_SESSION['cat_test']->item[2]['name'];  
  11. echo '<br />';  
  12. echo '购物车中共有商品总数:',$cart->getNumber();  
  13. echo '<br />';  
  14. echo '购物车中商品总价:',$_SESSION['cat_test']->getPrice();  
  15. //session_destroy();  
  16. //$_SESSION['cat_test']->emptyItem();  
  17. ?>  

这种php购物车类网上有许多,可以根据自己的需求进行二次开发,拿去测试吧,挺好玩的。

标签:

1 条留言  访客:1 条  博主:0 条

  1. 三月福利吧

    看你这个( 夏日php电子商务系统 v0.2)做的非常不错!

给我留言