ID: 25975 Updated by: [EMAIL PROTECTED] Reported By: reiersol at online dot no -Status: Open +Status: Bogus Bug Type: Session related Operating System: Linux RedHat 9.0 PHP Version: 5CVS-2003-10-24 (dev) New Comment:
Why would it be same when you change the "contents" of the object after unserializing it? Still no bug. Previous Comments: ------------------------------------------------------------------------ [2003-11-02 09:36:42] reiersol at online dot no I realized that an even better way to test this is to use the triple equals sign (see http://no.php.net/manual/en/language.oop.object-comparison-php5.php): var_dump($f->v1 === $f->v2); var_dump($g->v1 === $g->v2); This outputs: bool(true) bool(false) Based on the manual, this should mean that the two members refer to the same instance of the same class before serialize/unserialize, but not after. ------------------------------------------------------------------------ [2003-11-01 14:04:48] cunha17 at uol dot com dot br C'mon sniper, just put $g = $f; instead of $g = unserialize(serialize($f)); and you see that the result will be different, when, in fact, it shouldn't. That's definetly a bug. ------------------------------------------------------------------------ [2003-11-01 05:22:22] [EMAIL PROTECTED] Still can't see what might be wrong here. The result you get is pretty much what I would expect to get.. ------------------------------------------------------------------------ [2003-10-31 03:42:04] reiersol at online dot no I guess I'll have to expand my example: class Bar { var $value = 0; } class Foo { var $v1; var $v2; function Foo() { $this->v1 = new Bar; $this->v2 = $this->v1; } } $f = new Foo; $f->v2->value = 42; var_dump($f); $g = unserialize(serialize($f)); $g->v2->value = 'and now for something completely different'; var_dump($g); Here's the output: object(foo)#1 (2) { ["v1"]=> object(bar)#2 (1) { ["value"]=> int(42) } ["v2"]=> object(bar)#2 (1) { ["value"]=> int(42) } } object(foo)#3 (2) { ["v1"]=> object(bar)#4 (1) { ["value"]=> int(42) } ["v2"]=> object(bar)#5 (1) { ["value"]=> string(42) "and now for something completely different" } } That should at least make it clear that there's a difference in behavior before and after serialization. And the behavior before serialization is the behavior of a normal object-oriented language. (I ported the example to Java just to make sure I wasn't crazy.) I'm not trying to split hairs. I tried creating the kind of sophiticated object-oriented structure that PHP 5 makes so much easier. It worked wonderfully. But then I discovered that the structure didn't persist across sessions. So I made this simplified example to demonstrate the problem. ------------------------------------------------------------------------ [2003-10-30 20:59:30] [EMAIL PROTECTED] There are no references in the before serialize object, so why should there be references after serializing/unserializing? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/25975 -- Edit this bug report at http://bugs.php.net/?id=25975&edit=1