使用Session作为对象数组


Use Session as Array of Object.

大家好,我是PHP的新手,有人让我写一个购物车系统来添加和删除项目。我投了两个班,一个班一个。item类工作得很好,但是basket类总是在某些时候崩溃。下面是代码:

<?php
class produit
{
private $nom;
private $prix;
private $id;
private $categorie;
private $qty;
public function setProduit($nom,$prix,$id,$cat)
{
    $this->nom=$nom;
    $this->prix=$prix;
    $this->id=$id;
    $this->categorie=$cat;
    $this->qty=1;
}
public function getNom()
{
    return $this->nom;
}
public function getPrix()
{
    return $this->prix;
}
public function getCategorie()
{
    return $this->categorie;
}
public function getID()
{
    return $this->id;
}
public function getQty()
{
    return $this->qty;
}
public function changeQty()
{
    $this->qty+=1;
}
public function getThumb()
{
    try
    {
        require"connectionbd.php";
        $req="select images from bs_produits where id=:i";
        $res=$bdd->prepare($req);
        $res->execute(array('i'=>$this->id));
        $v=$res->fetch(PDO::FETCH_OBJ);
        $v->images=str_replace("../","",$v->images);
        $v->images.="/thumb1.png";
        return $v->images;
    }
    catch(Exception $e)
      {
        die('Erreur : ' . $e->getMessage().' a la ligne '.$e->getLine().' dans le fichier '.$e->getFile());
      }
}
  }
 ?>

下面是篮子类代码:

<?php
 @session_start();
 include"prduitclass.php";
 class panier
  {
//le panier a un tableau de 10 produits
public function setPanier()
{
    if(!isset($_SESSION['basket']))
        $_SESSION['basket']=array();
}
private function lookforduplicate( $prod)
{
    echo"<script>console.log('".var_dump($prod->getNom())."')</script>";
    $i=0;
    $exit=0;
    if(empty($_SESSION['basket']))
    {
        return $exit;
    }
    else
    {
        foreach($_SESSION['basket'] as $produit)
            {
                if($produit->getID()===$prod->getID())
                {
                    $_SESSION['basket'][$i]->changeQty();
                    $exit=1;
                }
                $i++;
            }
        }
    return $exit;
}
public function addProduit( $prod)
{
    $v=0;
    if(!$this->lookforduplicate($prod))
    {
        array_push($_SESSION['basket'], $prod);
        $v=1;
    }
    else
        $v=0;
    return $v;
}
public function removeProduit( $prod)
{
    $i=0;
    foreach($_SESSION['basket'] as $produit)
    {
        if($produit->getID()===$prod->getID())
        {
            unset($_SESSION['basket'][$i]);
        }
    }
}

 }
 ?>

最后这里是我从php得到的错误:

致命错误:panier::lookforduplicate():脚本试图执行一个方法或访问一个不完整对象的属性。请确保类定义"产品";在 unserialize()被调用之前,或者提供__autolload()函数来加载C:'wamp'www'bwanshop'panierclass.php中的类定义

我不知道如何精确设置我的会话应该是一个类型为" product "的数组篮子类中的foreach循环会给我一个错误,请帮助我解决这个谜语,谢谢

尝试在开始会话之前放入包含class def的行;可能在会话开始时,会话变量被反序列化并需要定义(错误消息听起来很像)-像这样:

require_once "prduitclass.php";
session_start();