как правильно хранить объекты внутри сессий?

  • Автор темы Wingely Dog
  • Дата начала

Wingely Dog

Guest
как правильно хранить объекты внутри сессий?

Добрый день, делаю вот что,

пишу магазин и заказ решил хранить в виде объекта.
создаю объект $ord и сую в переменную сессии

$_SESSION['ord'] = $ord;

затем пытюсь прочесть этот объект, в другом классе, при создании отображения потребительской корзины

PHP:
class cartHtml{
//.............
  function getHtml(){
    global $_SESSION;
    if (isset($_SESSION['ord'])){
      $ord = $_SESSION['ord'];
      while ($elmnt = $ord->getNext()){
/*
тут я получаю сообщение об ошибке

Fatal error: Unknown(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition <b>order</b> of the object you are trying to operate on was loaded _before_ the session was started in /var/www/html/escor/modules/ctlg/class.cart_html.php on line 40

*/
      }
    }
  }
//.................
}
вобщем переменная сессии есть, но как объект она почемуто не действует. вопрос почему?

пробовал сериализовать объект перед помещением его в сессию, не помогает.
 

tony2001

TeaM PHPClub
перед session_start(); (во время которого объекты из сессии становятся доступны скрипту) нужно инклудить классы этих объектов.
у тебя получается: объект есть, а его класс РНР неизвестен.
 

Wingely Dog

Guest
ага, что делать, понял, спасибо.

теоретический вопрос тогда можно?
возможно вопрос глупый, но все же.
а разве объект, это не кусок памяти структурированный особым образом? тоесть мне не понятно, зачем нужно по новой загружать исходный код класса, для того чтобы достать объект из сессии?
 

tony2001

TeaM PHPClub
>а разве объект, это не кусок памяти структурированный особым образом?
нет

>тоесть мне не понятно, зачем нужно по новой загружать исходный код класса,
>для того чтобы достать объект из сессии?
потому, что объект в сессии - это просто кусок текста с именем класса и значениями атрибутов, которые присущи только этому экземпляру.
а объявления методов и др. информация не может быть получена из сериализованного объекта.
 
Сверху