#45299 [Bgs]: serialize / unserialize $GLOBALS breaks global objects
| From: | taco at procurios dot nl | 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