Req #36424 [Asn->Csd]: Keeping reference info through recursive calls to serialize()
| From: | mike@php.net | Date: | Fri, 30 Sep 2011 06:49:56 +0000 |
| Subject: | Req #36424 [Asn->Csd]: Keeping reference info through recursive calls to serialize() | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-163989@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=36424&edit=1
ID: 36424
Updated by: mike@php.net
Reported by: mastabog at hotmail dot com
Summary: Keeping reference info through recursive calls to
serialize()
-Status: Assigned
+Status: Closed
Type: Feature/Change Request
Package: Unknown/Other Function
Operating System: *
PHP Version: 5.2.14-dev
Assigned To: mike
Block user comment: N
Private report: N
New Comment:
The patch is contained in upcoming PHP-5.4
Previous Comments:
------------------------------------------------------------------------
[2010-12-10 12:40:13] peter at desk dot nl
I've just been bitten by this bug (in php 5.3.3), cost me half a day to figure it out...
it's highly annoying because I can't go back to using __sleep and __wakeup without much
rewriting, and while working around it is feasible, it's pretty hacky in my situation.
what has happened to the patch mentioned in may ? was it ever committed ?
------------------------------------------------------------------------
[2010-05-26 09:24:41] mike@php.net
Automatic comment from SVN on behalf of mike
Revision: http://svn.php.net/viewvc/?view=revision&revision=299770
Log: Added support for object references in recursive serialize() calls. FR #36424
------------------------------------------------------------------------
[2010-05-21 13:08:07] mastabog at hotmail dot com
I still don't understand why this is not seen as a bug. My example shows that without
"implements Serializable" object references are honoured (as expected) while with
"implements Serializable" object references are broken (which is unexpected).
Seeing you classified this as "feature request" makes me think that breaking object
references was actually intended behaviour or that there is a way to maintain object references when
implementing Serializable. Can you then please provide the body of the serialize() and unserialize()
methods in class A in the example below that will maintain object references as expected, i.e.
$new_oC->A === $new_oC->B->A?
class A implements Serializable
{
public function serialize ()
{
[...]
}
function unserialize($serialized)
{
[...]
}
}
class B extends A
{
public $A;
}
class C extends A
{
public $A;
public $B;
}
$oC = new C();
$oC->A = new A();
$oC->B = new B();
$oC->B->A = $oC->A;
echo $oC->A === $oC->B->A ? "yes" : "no", "\n";
$ser = serialize($oC);
$new_oC = unserialize($ser);
echo $new_oC->A === $new_oC->B->A ? "yes" : "no", "\n";
------------------------------------------------------------------------
[2010-05-21 11:19:54] mike@php.net
Reclassified as Change Request.
JFYI: http://news.php.net/php.internals/48369
------------------------------------------------------------------------
[2010-05-20 23:21:02] mastabog at hotmail dot com
Why has the status of this been changed to "bogus"?
Are we to understand that the devs regard this as being intended behaviour, i.e. the Serializable
interface breaks object references of objects implementing it?
The initial reproduce code shows that what was an object reference before is no longer a reference
after unserialization ... this is a bug. There may be other (better) reproduce codes but the bug is
still there. Why not try and fix it?
Well, I tried but I think I will give up ... it's been 4+ years!
------------------------------------------------------------------------
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
https://bugs.php.net/bug.php?id=36424
--
Edit this bug report at https://bugs.php.net/bug.php?id=36424&edit=1