1
我有一個購物車類,我希望序列化以存儲在會話變量中。PHP Zend Framework序列化對象數組
我的購物車類是
namespace Application\Model\Cart;
use Application\Model\AbstractModel;
use Zend\ServiceManager\ServiceManager;
use Application\Model\Cart\Product;
use Application\Model\Cart\ProductOptions;
use Application\Entity\Products;
class Cart extends AbstractModel
{
protected $products;
protected $totalIncVat;
protected $totalExVat;
public function __construct(ServiceManager $serviceManager = NULL)
{
parent::__construct($serviceManager);
$this->products = array();
$product = new Product();
$product->setProductId(1);
$option = new ProductOptions();
$product->addOption($option);
$this->products[] = $product;
}
public function __sleep()
{
return $this->products;
}
}
正如在我加入一個測試產品和產品選項的構造可以看出。產品類別存儲在數組$this->products
中。
我的產品類是
namespace Application\Model\Cart;
use Application\Model\Cart\ProductOptions;
class Product
{
protected $productId;
protected $title;
protected $priceEachIncVat;
protected $priceEachVat;
protected $vat;
protected $qty;
protected $total;
protected $options;
public function __construct()
{
$this->options = array();
}
public function getProductId()
{
return $this->productId;
}
public function getTitle()
{
return $this->title;
}
public function getPriceEachIncVat()
{
return $this->priceEachIncVat;
}
public function getPriceEachVat()
{
return $this->priceEachVat;
}
public function getVat()
{
return $this->vat;
}
public function getQty()
{
return $this->qty;
}
public function getTotal()
{
return $this->total;
}
public function getOptions()
{
return $this->options;
}
public function setProductId($productId)
{
$this->productId = $productId;
return $this;
}
public function setTitle($title)
{
$this->title = $title;
return $this;
}
public function setPriceEachIncVat($priceEachIncVat)
{
$this->priceEachIncVat = $priceEachIncVat;
return $this;
}
public function setPriceEachVat($priceEachVat)
{
$this->priceEachVat = $priceEachVat;
return $this;
}
public function setVat($vat)
{
$this->vat = $vat;
return $this;
}
public function setQty($qty)
{
$this->qty = $qty;
return $this;
}
public function setTotal($total)
{
$this->total = $total;
return $this;
}
public function setOptions(Array $options)
{
$this->options = $options;
return $this;
}
public function addOption(ProductOptions $option)
{
$this->options[] = $option;
return $this;
}
}
最後我的產品選項類是
namespace Application\Model\Cart;
class ProductOptions
{
protected $optionId;
protected $name;
protected $price;
protected $valueId;
protected $value;
public function getOptionId()
{
return $this->optionId;
}
public function getName()
{
return $this->name;
}
public function getPrice()
{
return $this->price;
}
public function getValueId()
{
return $this->valueId;
}
public function getValue()
{
return $this->value;
}
public function setOptionId($optionId)
{
$this->optionId = $optionId;
return $this;
}
public function setName($name)
{
$this->name = $name;
return $this;
}
public function setPrice($price)
{
$this->price = $price;
return $this;
}
public function setValueId($valueId)
{
$this->valueId = $valueId;
return $this;
}
public function setValue($value)
{
$this->value = $value;
return $this;
}
}
我遇到的問題是,類不序列化正確。
$serializer = new \Zend\Serializer\Adapter\PhpSerialize();
$serialized = $serializer->serialize($cart);
$cart = $serializer->unserialize($serialized);
當我從購物車的構造函數中刪除測試產品時效果都很好。產品陣列造成了這個問題。
我得到的錯誤是unserialize():41個字節的偏移量爲40的錯誤。
返回序列化的字符串是
○:27: 「應用程序\型號\車\車」:1:{N;}
有誰知道我缺少的是什麼?
非常感謝提前。
我想通了。購物車類中的睡眠魔法方法應該包含返回數組('products'); – Garry
你可以解答你的問題,並接受它作爲好的答案,也許它會幫助別人;) – Hooli