PHP Zend框架序列化对象数组


PHP Zend Framework serialize array of objects

我有一个购物车类,我希望将其序列化以存储在会话变量中。

我的购物车类是

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(): error at offset 40 of 41 bytes.

返回的序列化字符串是

O: 27:"应用程序模型' '车'购物车":1:{N;}

有人知道我错过了什么吗?

提前感谢。

我明白了。cart类中的sleep magic方法应该包含return array('products');