note 91757 deleted from language.oop.serialization by danbrown
| From: | danbrown@php.net | Date: | Sat, 07 Nov 2009 19:12:16 +0000 |
| Subject: | note 91757 deleted from language.oop.serialization by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-162592@lists.php.net to get a copy of this message | ||
Note Submitter: php at kennelREMOVEME17 dot co dot uk
----
In both PHP4 and PHP5, references are lost when serializing/unserializing (contrary to what is
claimed by kendlj at NOSPAM dot web dot de, below). This is kind of understandable, but something
to watch out for.
Example code:
<?php
class Test {
var $a = array();
function Test(&$Value) {
$this->a['byval'] = $Value;
$this->a['byref'] =& $Value;
}
}
$MyVar = "original value";
$obj = new Test($MyVar);
print("After original creation:\n");
print_r($obj);
$MyVar = "second value";
print("\nAfter changing variable value:\n");
print_r($obj);
$obj = unserialize(serialize($obj));
print("\nAfter serialize/unserialize:\n");
print_r($obj);
$MyVar = "third value";
print("\nAfter changing variable value again:\n");
print_r($obj);
?>
Output:
======
After original creation:
object(Test)#1 (1) {
["a"]=>
array(2) {
["byval"]=>
string(14) "original value"
["byref"]=>
&string(14) "original value"
}
}
After changing variable value:
object(Test)#1 (1) {
["a"]=>
array(2) {
["byval"]=>
string(14) "original value"
["byref"]=>
&string(12) "second value"
}
}
After serialize/unserialize:
object(Test)#2 (1) {
["a"]=>
array(2) {
["byval"]=>
string(14) "original value"
["byref"]=>
string(12) "second value"
}
}
After changing variable value again:
object(Test)#2 (1) {
["a"]=>
array(2) {
["byval"]=>
string(14) "original value"
["byref"]=>
string(12) "second value"
}
}