From:             [EMAIL PROTECTED]
Operating system: FreeBSD 4.2
PHP version:      4.0.6
PHP Bug Type:     Session related
Bug description:  Correct algorithm for serializing objects

The references the currently open Bug id #13236.  I have confirmed this
bug.

I tried to add my comments to that bug, but apparently only the creator of
the bug can do that.

I don't have time to look at the PHP source code, but generally the way
serialization of objects is done (taken from C++ foundation classes I've
worked with) is on write build a hash table of object pointers/addresses as
key, and a unique id (auto increment) as value.  Write the id and class on
first instance, and then serialize only the id on subsequent references to
same object.

Then on read serialization (unserialization), build the same hash table
with the key and value reversed roles, i.e. the key is the id, and the
value is the pointer to the object.

AFAIK, this method will support cyclical references.  From the number of
bugs I've seen reported about storing objects and/or references in
sessions, I am guessing that PHP is not using this general algorithm.

I've seen other object and/or referenence bugs in sessions in past releases
of PHP (starting with PHP4.0.3pl1), and haven't had time to go back and
test to see what has been fixed, what has been broken, and what has not
been fixed.  It gets quite confusing and arduous to track.

I add this suggestion here if it may be of assistance, as a general way to
kill all these bugs.  I'd really like to see the serialization of objects
and references work correctly in a general way, as it is a very powerful
tool, vs. using other bandaids such long if-else constructs or redundant
arrays to achieve the equivalent of persistant object references.

Please take my input constructively.


-- 
Edit bug report at: http://bugs.php.net/?id=13800&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to