Неполный класс PHP при сериализации объекта в сеансах

Я работаю в корзине покупок (модель корзины). Одним из его защищенных свойств является «_items», который содержит массив объектов Product. Они (Продукты) все хранятся в БД для заполнения сеанса (с использованием ZF, Zend_Session_SaveHandler_DbTable () и т. Д.).

public function addItem(Model_Product $product, $qty) { $qty = (int) $qty; $pId = $product->getId(); if ($qty > 0) { $this->_items[$pId] = array('product' => $product, 'qty' => $qty); } else { // if the quantity is zero (or less), remove item from stack unset($this->_items[$pId]); } // add new info to session $this->persist(); } 

В контроллере я захватываю Product obj из DB с помощью ProductMapper и предоставляю его «addItem ()»:

  $product1 = $prodMapper->getProductByName('cap'); $this->_cart->addItem($product1, 2); 

getProductByName() возвращает новый заполненный объект Model_Product.


Обычно я получаю

Please ensure that the class definition "Model_Product" of the object you are trying to operate on was loaded _before_ ...

сообщение об ошибке, дамп сеанса, очевидно, показывает

['__PHP_Incomplete_Class_Name'] => 'Model_Product'


Я знаю о «объявлении класса перед его сериализацией». Моя проблема заключается в следующем: как я могу объявить класс Product в addItem() , если он сначала введен (первый параметр)? Не будет ли новая декларация (например, new Model_Product() ) переписать параметр (исходный объект) в addItem() ? Должен ли я объявить его в модели Cart снова?

Кроме того, я обязательно получу Cannot redeclare class Model_Product если я … обновил его в корзине.

Related of "Неполный класс PHP при сериализации объекта в сеансах"