#45299 [Bgs]: serialize / unserialize $GLOBALS breaks global objects

From: Date: Fri, 04 Jul 2008 08:43:25 +0000
Subject: #45299 [Bgs]: serialize / unserialize $GLOBALS breaks global objects
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-126272@lists.php.net to get a copy of this message
ID: 45299 User updated by: taco at procurios dot nl Reported By: taco at procurios dot nl Status: Bogus Bug Type: Class/Object related Operating System: linux PHP Version: 5.2.6 New Comment: Sebastian Bergmann should not serialize $GLOBALS or I should turn off this feature in my PHPUnit test code (which I did). I can agree with that, but that does not change the fact that it is possible to serialize and unserialize the $GLOBALS array and that it breaks objects. PHP should either not allow the $GLOBALS array to be serialized, as it does with PHP built-in objects, or should unserialize the array correctly. This bug might be minor, but still it is a bug. While trying to figure out a workaround for the PHPUnit code I found out that a global variable that is 'broken' by this behaviour cannot be restored, add the following lines to the original reproduce code: $Foo = new Foo(12); var_dump($GLOBALS['Foo']); global $Foo; var_dump($GLOBALS['Foo']); The value in the $GLOBALS array doesn't change anymore, sounds like pretty buggy to me. (Bad practice or not) Previous Comments: ------------------------------------------------------------------------ [2008-07-04 08:16:40] jani@php.net Complain to PHPUnit people then. ------------------------------------------------------------------------ [2008-07-03 11:55:57] taco at procurios dot nl I don't ;) I encountered this 'bug' while using PHPUnit, see: http://www.phpunit.de/browser/phpunit/trunk/PHPUnit/Framework/TestCase.php#L370 ------------------------------------------------------------------------ [2008-07-03 11:53:02] jani@php.net Please tell us WHY do you want to serialize special super global arrays like $GLOBALS in the first place?! That's propably the dummiest idea ever.. ------------------------------------------------------------------------ [2008-06-18 12:03:24] taco at procurios dot nl Description: ------------ When serializing and later on deserializing the $GLOBALS array, global objects aren't recreated. Reproduce code: --------------- class Foo { public $foo; public function __construct($foo) { $this->foo = $foo; } } $Foo = new Foo(34); var_dump($GLOBALS['Foo']); $s = serialize($GLOBALS); $GLOBALS = unserialize($s); var_dump($GLOBALS['Foo']); Expected result: ---------------- object(Foo)#1 (1) { ["foo"]=> int(34) } object(Foo)#1 (1) { ["foo"]=> int(34) } Actual result: -------------- object(Foo)#1 (1) { ["foo"]=> int(34) } int(1) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=45299&edit=1

« previous php.bugs (#126272) next »