来请教一个问题

gilper 2013-02-24 06:44:58
咱在做一个购物车
购物车页面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
...全文
287 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gilper 2013-02-24
  • 打赏
  • 举报
回复
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() [<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 &quot;cart&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 /> 文件有加载进来
xuzuning 2013-02-24
  • 打赏
  • 举报
回复
错误信息显示的是你的chrt类定义没有加载 你在出错的前一行执行 print_r(get_included_files()); 确认一下
gilper 2013-02-24
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
代码有点乱,一下看不清楚 你将对象放进了 session,那么在 session_start 前应载入该对象的类定义
顺序是下面这样的 自动加载在前 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();
xuzuning 2013-02-24
  • 打赏
  • 举报
回复
代码有点乱,一下看不清楚 你将对象放进了 session,那么在 session_start 前应载入该对象的类定义

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧