Are you f'ing kidding me?!

http://www.php.net/manual/en/ref.session.php

"Some types of data can not be serialized thus stored in sessions. It
includes resource variables or objects with circular references (i.e.
objects which passes a reference to itself to another object). "

L A M E !!!

This is absurd. There shouldn't be any reason I can't send a reference to
another object -- Especially a built in type! UGH.

> -----Original Message-----
> From: Daevid Vincent [mailto:[EMAIL PROTECTED] 
> Sent: Friday, September 30, 2005 3:02 PM
> To: php-general@lists.php.net
> Subject: [PHP] PHP5, $_SESSION, DOM XML objects not returning value
> 
> I'm trying to store an array of DOM XML objects
> (http://www.php.net/manual/en/ref.dom.php) in a PHP5.0.3 
> $_SESSION array,
> but when I load the session back (and yes, I've declared my 
> class before the
> session_start()), I get these errors:
> 
> Warning: XMLRule::getValue() [function.getValue]: Invalid State Error 
> in /lockdown/includes/classes/rule_xml.class.php on line 74
> 
> Or
> 
> Warning: XMLRule::getValue() [function.getValue]: Invalid State Error 
> in /lockdown/includes/classes/rule_xml.class.php on line 81
> 
> And all the VALUES are empty, however *my* XMLRule class 
> array seems right
> otherwise. It's like PHP didn't serialize all of it's own DOM 
> XML objects
> (which are built in objects!!!)
> 
> Here are the pertinent parts of the classes and other code snippets.
> 
> ##############################################################
> ##############
> #####
> class XMLRule 
> {
>       // for example 'is_username' XML tag would set $name = 
> 'Username'
>     protected $name = null;
> 
>       // The reference pointer to the DOMNode, this is a wealth of
> information in itself.
>       // look at the DOMNode class @
> http://www.php.net/manual/en/ref.dom.php
>     protected $DOMNode = null;
>       
>     protected function __construct($DOMNode, $name, $id = null) 
>       {
>               $this->DOMNode = $DOMNode;
>               $this->name = $name;
>               $this->id = $id;
>     } //__construct()
> 
> 
>       function getValue() 
>       {
>               //check for multiple values, such as a list of 
> names perhaps
> [#74]         if ($this->DOMNode->childNodes->length > 1)
>               {
>                       foreach ($this->DOMNode->childNodes as 
> $tmpNode) 
>                               $tmpArray[] = $tmpNode->nodeValue;
>                       return $tmpArray;
>               }
>               else
> [#81]                 return $this->DOMNode->nodeValue;
>       }
> }
> 
> class is_username extends XMLRule
> {
>       function __construct($DOMNode, $id = null) {
> parent::__construct($DOMNode, 'Username', $id); }
> }
> 
> class is_day extends XMLRule
> {
>       function __construct($DOMNode, $id = null) {
> parent::__construct($DOMNode, 'Day', $id); }
> }
> 
> ...etc...
> 
> ##############################################################
> ##############
> #####
> 
> // IMPORTANT: You *MUST* declare the class *BEFORE* you call
> session_start(). 
> // If you run session_start() before the definition of the class, 
> // the session variables of the objects will be corrupted.
> // http://www.zend.com/phorum/read.php?num=3&id=36854&thread=36847
> 
> require_once('classes/rule_xml.class.php');
> 
> if (!isset($_SESSION['ruleArray']))
> {
>       $XMLDOC = new DOMDocument();
>       $XMLDOC->loadXML($xmlstring);
>       
>       $ruleArray = array();
>       $i = 1;
>       $or = 1;
>       foreach($XMLDOC->firstChild->childNodes as $myNode)
>       {
>               if ($myNode->nodeName == 'and_conditions')
>               {
>                       foreach($myNode->childNodes as $cNode)
>                       {
>                               $key = (string)($cNode->nodeName);
>                               //make a new instance of the node name'd
> class
>                               $ruleArray[$or][$i] = new 
> $key($cNode, $i); 
>                               $i++;
>                       }
>                       
>                       $or++; //begin new OR block
>               } //if and_conditions
>       } //foreach $myNode
>       
>       $_SESSION['ruleArray'] = serialize($ruleArray);
> }
> else $ruleArray = unserialize($_SESSION['ruleArray']);
> 
> I've tried this with the un/serialize and without. PHP5 is supposed to
> handle that for me, but just in case, I tried it anyways.
> 
> If I don't use the $SESSION, then things work fine and I have 
> my values.
> 
> I also tried to do this:
> 
>       $_SESSION['ruleArray'] = $ruleArray;
>       $ruleArray = $_SESSION['ruleArray'];
> 
> And surprisingly that works (although it doesn't solve my problem).
> 
> ##############################################################
> ##############
> #####
> Upon loading this back, this is what the array looks like in 
> either case
> (working or not)
> 
> Array
> (
>     [1] => Array
>         (
>             [1] => is_username Object
>                 (
>                     [name:protected] => Username
>                     [DOMNode:protected] => DOMElement Object
>                         (
>                         )
>                     [id:protected] => 1
>                 )
> 
>             [2] => is_day Object
>                 (
>                     [name:protected] => Day
>                     [DOMNode:protected] => DOMElement Object
>                         (
>                         )
>                     [id:protected] => 2
>                 )
> 
>       ...etc...
> 
> ##############################################################
> ##############
> #####
> 
> PHP Version 5.0.3
> 
> This program makes use of the Zend Scripting Language Engine:
> Zend Engine v2.0.3, Copyright (c) 1998-2004 Zend Technologies
>     with Zend Extension Manager v1.0.6, Copyright (c) 
> 2003-2004, by Zend
> Technologies
>     with Zend Optimizer v2.5.7, Copyright (c) 1998-2004, by Zend
> Technologies
> 
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
> 
> 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to