咱在做一个购物车
购物车页面cart.php<?php
define('ACCESE',1);
require('../init.php');$_GET['gid'] = (int)$_GET['gid'];
$_GET['num'] = (int)$_GET['num'];$goods = new goodsModel();
$goods->db();
$cart = cart::getCart();switch($_GET['act']) {
        //添加商品
        case 'buy':{
                $result = $goods->select_goods("g_id = $_GET[gid] and g_sale=1 and g_del=0");
                $g = $goods->db->fetch_array($result);
                //有此商品
                if(!empty($g)) { //判断商品是否存在
                        if($g['g_no'] < $_GET['num']) { //判断库存
                                $type = 'error';
                                $msg = '放到购物车添加失败(可能是库存不足或者管理员私吞了)';
                                include(ROOT.'view/home/tip.html');
                                exit;
                        }
                        //商品存在
                        $cart->addItem("$g[g_id]","$g[g_name]","$g[g_price]","$_GET[num]");   //----------------------此行报错
                } else {
                        $type = 'error';
                        $msg = '放到购物车添加失败(可能是下架、删除或者管理员私吞了)';
                        include(ROOT.'view/home/tip.html');
                        exit;
                }
                break;
        }}$title = '购物车 - 商城系统';
$path = '购物车';
include(ROOT.'view/home/cart.html');
?>
购物车类<?php
defined('ACCESE') || EXIT('ACCESE DENIED');class cart {
        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() {
                if(!isset($_SESSION['cart'])) {
                        $_SESSION['cart'] = self::getIns();
                }
                return $_SESSION['cart'];
        }        //添加商品
        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;
        }        //修改购物车中的商品数量
        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 getClass() {
                return count($this->items);
        }        //查询购物车商品个数
        public function getNum() {
                if($this->getClass() == 0) {
                        return 0;
                }
                $sum = 0;
                foreach($this->items as $item) {
                        $sum += $item['num'];
                }
                return $sum;
        }        //查询购物车商品总额
        public function getPrice() {
                if($this->getClass() == 0) {
                        return 0;
                }
                $price = 0.00;
                foreach($this->items as $item) {
                        $price += $item['num'] * $item['price'];
                }
                return $price;
        }
        
        //返回购物车所有商品
        public function all() {
                return $this->items;
        }        //清空购物车
        public function clear() {
                $this->items = array();
        }
}
?>
cart.php加载的init.php<?php
//检测安全常量
defined('ACCESE') || EXIT('ACCESE DENIED');//设置时区
date_default_timezone_set('prc');//初始化绝对路径
define(ROOT,str_replace('\\','/',dirname(__FILE__)).'/');//运行模式
error_reporting(E_ALL); //开发模式
//error_reporting(0); //部署模式//安全转义
require(ROOT.'core/function/addslashes.func.php');
$_GET = _addslashes($_GET);
$_POST = _addslashes($_POST);
$_REQUEST = _addslashes($_REQUEST);
$_COOKIE = _addslashes($_COOKIE);//自动加载模型和类
function __autoload($class) {
        if(strtolower(substr($class,-5))=='model'){
                include ROOT.'model/'.$class.'.class.php';
        }
        else{
                include ROOT.'core/class/'.$class.'.class.php';
        }
}//开启session
if (!session_id()) session_start();//加载弹窗函数
include(ROOT.'/core/function/dialog.func.php');
?>
老是报错 报错内容
Fatal error: main() [<a href='function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "cart" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in E:\APMServ5.2.6\www\htdocs\home\cart.php on line 32咱上网查了 好像说类没定义 但是不懂该改哪里 请高手指点一下 万分3Q

解决方案 »

  1.   

    代码有点乱,一下看不清楚
    你将对象放进了 session,那么在 session_start 前应载入该对象的类定义
      

  2.   

    顺序是下面这样的 自动加载在前 session_start在后 但是一样
    //自动加载模型和类
    function __autoload($class) {
            if(strtolower(substr($class,-5))=='model'){
                    include ROOT.'model/'.$class.'.class.php';
            }
            else{
                    include ROOT.'core/class/'.$class.'.class.php';
            }
    }
     
    //开启session
    if (!session_id()) session_start();
      

  3.   

    错误信息显示的是你的chrt类定义没有加载你在出错的前一行执行
    print_r(get_included_files());
    确认一下
      

  4.   

    Array
    (
        [0] => E:\APMServ5.2.6\www\htdocs\home\cart.php
        [1] => E:\APMServ5.2.6\www\htdocs\init.php
        [2] => E:\APMServ5.2.6\www\htdocs\core\function\addslashes.func.php
        [3] => E:\APMServ5.2.6\www\htdocs\core\function\dialog.func.php
        [4] => E:\APMServ5.2.6\www\htdocs\model\goodsModel.class.php
        [5] => E:\APMServ5.2.6\www\htdocs\model\Model.class.php
        [6] => E:\APMServ5.2.6\www\htdocs\core\config\config.conf.php
        [7] => E:\APMServ5.2.6\www\htdocs\core\class\mysql.class.php
        [8] => E:\APMServ5.2.6\www\htdocs\core\class\cart.class.php
        [9] => E:\APMServ5.2.6\www\htdocs\core\class\log.class.php
    )
    <br />
    <b>Fatal error</b>:  main() [&lt;a href='function.main'&gt;function.main&lt;/a&gt;]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &amp;quot;cart&amp;quot; of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition  in <b>E:\APMServ5.2.6\www\htdocs\home\cart.php</b> on line <b>33</b><br />文件有加载进来