如何在$ session数组变量中保存许多对象

时间:2013-11-07 18:16:52

标签: php session object

我是面向对象编程的新手,所以这个问题可能很愚蠢......

我在一个名为classProduct.php

的单独文件中创建了我的类
<?php
class  product{

    public $prodId;
    public $prodName;
    public $prodPrice;

    public function __construct($prodId,$prodName,$prodPrice){
        $this->prodId = $prodId;
        $this->prodName=$prodName;
        $this->prodPrice=$prodPrice;
    }

    public function get_prodId(){
        return $this->prodId;
    }

    public function get_prodName(){
        return $this->prodName;
    }

    public function get_prodPrice(){
        return $this->prodPrice;
    }
}
?>

然后我尝试在$ _SESSION变量中创建一个新对象。这发生在另一个名为dailySales.php的文件中,其中我使用以下文件包含上一个文件:

include_once("classProduct.php");

我想要做的是在每个新对象中保存$_SESSION['myItems']。我正在尝试类似的事情:

$newItem= new product($var,$var,$var);
$_SESSION['myItems']=array($newItem); // I believe here is where I do it wrong

每当买家再选择一个产品时,页面就会重新加载(使用ajax)。当我echovar_dump $_SESSION['myItems']时,我只会获得最后一个对象。我需要更改什么才能使其正常工作?

当然我确实需要这个对象,所以我可以轻松地从购物车中删除产品 按下“删除”。

1 个答案:

答案 0 :(得分:1)

这对我来说很有帮助。

将您的items会话变量定义为数组,然后使用array_push

将它们推送到变量中
class product {

  public $prodId;
  public $prodName;
  public $prodPrice;

  public function __construct($prodId, $prodName, $prodPrice) {
    $this->prodId    = $prodId;
    $this->prodName  = $prodName;
    $this->prodPrice = $prodPrice;
  }

  public function get_prodId() {
    return $this->prodId;
  }

  public function get_prodName() {
    return $this->prodName;
  }

  public function get_prodPrice() {
    return $this->prodPrice;
  }
}

然后像这样使用它:

$product = new product(1, "test", 23);
$product2 = new product(2, "test2", 43);

$_SESSION['items'] = array();
array_push($_SESSION['items'], $product, $product2);
echo '<pre>';
print_r($_SESSION['items']);
echo '</pre>';

这是print_r()

的输出
Array
(
    [0] => product Object
        (
            [prodId] => 1
            [prodName] => test
            [prodPrice] => 23
        )
[1] => product Object
    (
        [prodId] => 2
        [prodName] => test2
        [prodPrice] => 43
    )

)