cvs: php-src /ext/standard/tests/serialize 005.phpt serialization_arrays_001.phpt serialization_arrays_002.phpt serialization_arrays_003.phpt
serialization_arrays_004.phpt serialization_arrays_005.phpt serialization_error_001.phpt serialization_miscTypes_001.phpt
serialization_objects_001.phpt serialization_objects_002.phpt serialization_objects_003.phpt serialization_objects_004.phpt
serialization_objects_005.phpt serialization_objects_006.phpt serialization_objects_007.phpt serialization_objects_008.phpt
serialization_objects_009.phpt serialization_objects_010.phpt serialization_objects_011.phpt serialization_objects_012.phpt
serialization_objects_013.phpt serialization_objects_014.phpt serialization_objects_015.phpt serialization_precision_001.phpt
serialization_precision_002.phpt serialization_resources_001.phpt

From: Date: Tue, 18 Mar 2008 15:12:42 +0000
Subject: cvs: php-src /ext/standard/tests/serialize 005.phpt serialization_arrays_001.phpt serialization_arrays_002.phpt serialization_arrays_003.phpt
serialization_arrays_004.phpt serialization_arrays_005.phpt serialization_error_001.phpt serialization_miscTypes_001.phpt
serialization_objects_001.phpt serialization_objects_002.phpt serialization_objects_003.phpt serialization_objects_004.phpt
serialization_objects_005.phpt serialization_objects_006.phpt serialization_objects_007.phpt serialization_objects_008.phpt
serialization_objects_009.phpt serialization_objects_010.phpt serialization_objects_011.phpt serialization_objects_012.phpt
serialization_objects_013.phpt serialization_objects_014.phpt serialization_objects_015.phpt serialization_precision_001.phpt
serialization_precision_002.phpt serialization_resources_001.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-49184@lists.php.net to get a copy of this message
robinf Tue Mar 18 15:12:42 2008 UTC Modified files: /php-src/ext/standard/tests/serialize serialization_objects_004.phpt serialization_objects_009.phpt serialization_precision_001.phpt serialization_objects_005.phpt serialization_objects_008.phpt serialization_objects_015.phpt serialization_objects_006.phpt serialization_objects_011.phpt serialization_objects_003.phpt serialization_arrays_002.phpt serialization_arrays_001.phpt serialization_objects_007.phpt serialization_miscTypes_001.phpt serialization_objects_014.phpt serialization_error_001.phpt serialization_arrays_003.phpt serialization_resources_001.phpt serialization_arrays_005.phpt serialization_objects_001.phpt serialization_precision_002.phpt serialization_objects_010.phpt serialization_objects_013.phpt serialization_arrays_004.phpt serialization_objects_012.phpt serialization_objects_002.phpt 005.phpt Log: Adding more tests for serialize() and unserialize().

http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_004.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_004.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_004.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_004.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,57 @@ +--TEST-- +Test serialize() & unserialize() functions: objects - ensure that COW references of objects are not serialized separately (unlike other types). +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +$x = new stdClass; +$ref = &$x; +var_dump(serialize(array($x, $x))); + +$x = 1; +$ref = &$x; +var_dump(serialize(array($x, $x))); + +$x = "a"; +$ref = &$x; +var_dump(serialize(array($x, $x))); + +$x = true; +$ref = &$x; +var_dump(serialize(array($x, $x))); + +$x = null; +$ref = &$x; +var_dump(serialize(array($x, $x))); + +$x = array(); +$ref = &$x; +var_dump(serialize(array($x, $x))); + +echo "Done"; +?> +--EXPECTF-- +string(37) "a:2:{i:0;O:8:"stdClass":0:{}i:1;r:2;}" +string(22) "a:2:{i:0;i:1;i:1;i:1;}" +string(30) "a:2:{i:0;S:1:"a";i:1;S:1:"a";}" +string(22) "a:2:{i:0;b:1;i:1;b:1;}" +string(18) "a:2:{i:0;N;i:1;N;}" +string(26) "a:2:{i:0;a:0:{}i:1;a:0:{}}" +Done +--UEXPECTF-- +unicode(37) "a:2:{i:0;O:8:"stdClass":0:{}i:1;r:2;}" +unicode(22) "a:2:{i:0;i:1;i:1;i:1;}" +unicode(30) "a:2:{i:0;U:1:"a";i:1;U:1:"a";}" +unicode(22) "a:2:{i:0;b:1;i:1;b:1;}" +unicode(18) "a:2:{i:0;N;i:1;N;}" +unicode(26) "a:2:{i:0;a:0:{}i:1;a:0:{}}" +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_009.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_009.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_009.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_009.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,36 @@ +--TEST-- +Custom unserialization of classes with no custom unserializer. +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +$ser = 'C:1:"C":6:{dasdas}'; +$a = unserialize($ser); +eval('class C {}'); +$b = unserialize($ser); + +var_dump($a, $b); + +echo "Done"; +?> +--EXPECTF-- + +Warning: Class __PHP_Incomplete_Class has no unserializer in %s on line 14 + +Notice: unserialize(): Error at offset 6 of 18 bytes in %s on line 14 + +Warning: Class C has no unserializer in %s on line 16 + +Notice: unserialize(): Error at offset 6 of 18 bytes in %s on line 16 +bool(false) +bool(false) +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_precision_001.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_precision_001.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_precision_001.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_precision_001.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,23 @@ +--TEST-- +Test serialize_precision (part 1) +--INI-- +serialize_precision=10 +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +var_dump(serialize(0.1)); +?> +--EXPECTF-- +string(6) "d:0.1;" +--UEXPECTF-- +unicode(6) "d:0.1;" \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_005.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_005.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_005.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_005.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,175 @@ +--TEST-- +Check behaviour of incomplete class +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +$serialized = 'O:1:"C":1:{s:1:"p";i:1;}'; + +$incomplete = unserialize($serialized); +eval('Class C {}'); +$complete = unserialize($serialized); + + +echo "\n\n---> Various types of access on complete class:\n" ; +var_dump($complete); +var_dump(is_object($complete)); +var_dump($complete->p); + +$ref1 = "ref1.original"; +$complete->p = &$ref1; +var_dump($complete->p); +$ref1 = "ref1.changed"; +var_dump($complete->p); +$complete->p = "p.changed"; +var_dump($ref1); + +var_dump(isset($complete->x)); +$complete->x = "x.new"; +var_dump(isset($complete->x)); +unset($complete->x); +var_dump($complete->x); + + +echo "\n\n---> Same types of access on incomplete class:\n" ; +var_dump($incomplete); +var_dump(is_object($incomplete)); +var_dump($incomplete->p); + +$ref2 = "ref1.original"; +$incomplete->p = &$ref2; +var_dump($incomplete->p); +$ref2 = "ref1.changed"; +var_dump($incomplete->p); +$incomplete->p = "p.changed"; +var_dump($ref1); + +var_dump(isset($incomplete->x)); +$incomplete->x = "x.new"; +var_dump(isset($incomplete->x)); +unset($incomplete->x); +var_dump($incomplete->x); + +$incomplete->f(); + +echo "Done"; +?> +--EXPECTF-- +---> Various types of access on complete class: +object(C)#%d (1) { + ["p"]=> + int(1) +} +bool(true) +int(1) +string(13) "ref1.original" +string(12) "ref1.changed" +string(9) "p.changed" +bool(false) +bool(true) + +Notice: Undefined property: C::$x in %s on line 37 +NULL + + +---> Same types of access on incomplete class: +object(__PHP_Incomplete_Class)#%d (2) { + ["__PHP_Incomplete_Class_Name"]=> + string(1) "C" + ["p"]=> + int(1) +} +bool(false) + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 43 +NULL + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 46 + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 47 +NULL + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 49 +NULL + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 50 +string(9) "p.changed" + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 53 +bool(false) + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 54 + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 55 +bool(false) + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 56 + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 57 +NULL + +Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 59 +--UEXPECTF-- +---> Various types of access on complete class: +object(C)#%d (1) { + [u"p"]=> + int(1) +} +bool(true) +int(1) +unicode(13) "ref1.original" +unicode(12) "ref1.changed" +unicode(9) "p.changed" +bool(false) +bool(true) + +Notice: Undefined property: C::$x in %s on line 37 +NULL + + +---> Same types of access on incomplete class: +object(__PHP_Incomplete_Class)#%d (2) { + [u"__PHP_Incomplete_Class_Name"]=> + unicode(1) "C" + [u"p"]=> + int(1) +} +bool(false) + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 43 +NULL + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 46 + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 47 +NULL + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 49 +NULL + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 50 +unicode(9) "p.changed" + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 53 +bool(false) + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 54 + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 55 +bool(false) + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 56 + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 57 +NULL + +Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "C" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 59 \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_008.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_008.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_008.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_008.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,36 @@ +--TEST-- +Bad unserialize_callback_func +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +ini_set('unserialize_callback_func','Nonexistent'); +$o = unserialize('O:3:"FOO":0:{}'); +var_dump($o); +echo "Done"; +?> +--EXPECTF-- + +Warning: unserialize(): defined (Nonexistent) but not found in %s on line 14 +object(__PHP_Incomplete_Class)#%d (1) { + ["__PHP_Incomplete_Class_Name"]=> + string(3) "FOO" +} +Done +--UEXPECTF-- + +Warning: unserialize(): defined (Nonexistent) but not found in %s on line 14 +object(__PHP_Incomplete_Class)#%d (1) { + [u"__PHP_Incomplete_Class_Name"]=> + unicode(3) "FOO" +} +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_015.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_015.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_015.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_015.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,992 @@ +--TEST-- +Object serialization / unserialization: properties reference containing object +--INI-- +error_reporting = E_ALL & ~E_STRICT +--FILE-- +<?php + +function check(&$obj) { + var_dump($obj); + $ser = serialize($obj); + var_dump($ser); + + $uobj = unserialize($ser); + var_dump($uobj); + $uobj->a = "obj->a.changed"; + var_dump($uobj); + $uobj->b = "obj->b.changed"; + var_dump($uobj); + $uobj->c = "obj->c.changed"; + var_dump($uobj); +} + +echo "\n\n--- a refs container:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = &$obj; +$obj->b = 1; +$obj->c = 1; +check($obj); + +echo "\n\n--- a eqs container:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = $obj; +$obj->b = 1; +$obj->c = 1; +check($obj); + +echo "\n\n--- a,b ref container:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = &$obj; +$obj->b = &$obj; +$obj->c = 1; +check($obj); + +echo "\n\n--- a,b eq container:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = $obj; +$obj->b = $obj; +$obj->c = 1; +check($obj); + +echo "\n\n--- a,b,c ref container:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = &$obj; +$obj->b = &$obj; +$obj->c = &$obj; +check($obj); + +echo "\n\n--- a,b,c eq container:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = $obj; +$obj->b = $obj; +$obj->c = $obj; +check($obj); + +echo "Done"; +?> +--EXPECTF-- +--- a refs container: +object(stdClass)#%d (3) { + ["a"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + int(1) + ["c"]=> + int(1) + } + ["b"]=> + int(1) + ["c"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";R:1;S:1:"b";i:1;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["a"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + int(1) + ["c"]=> + int(1) + } + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- a eqs container: +object(stdClass)#%d (3) { + ["a"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + int(1) + ["c"]=> + int(1) + } + ["b"]=> + int(1) + ["c"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";r:1;S:1:"b";i:1;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["a"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + int(1) + ["c"]=> + int(1) + } + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- a,b ref container: +object(stdClass)#%d (3) { + ["a"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + int(1) + } + ["b"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + int(1) + } + ["c"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";R:1;S:1:"b";R:1;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["a"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + int(1) + } + ["b"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + int(1) + } + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + &string(14) "obj->a.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- a,b eq container: +object(stdClass)#%d (3) { + ["a"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + int(1) + } + ["b"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + int(1) + } + ["c"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";r:1;S:1:"b";r:1;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["a"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + int(1) + } + ["b"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + int(1) + } + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + *RECURSION* + ["c"]=> + int(1) + } + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- a,b,c ref container: +object(stdClass)#%d (3) { + ["a"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } + ["b"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } + ["c"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } +} +string(55) "O:8:"stdClass":3:{S:1:"a";R:1;S:1:"b";R:1;S:1:"c";R:1;}" +object(stdClass)#%d (3) { + ["a"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } + ["b"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } + ["c"]=> + &object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + &string(14) "obj->a.changed" + ["c"]=> + &string(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + &string(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->c.changed" + ["b"]=> + &string(14) "obj->c.changed" + ["c"]=> + &string(14) "obj->c.changed" +} + + +--- a,b,c eq container: +object(stdClass)#%d (3) { + ["a"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } + ["b"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } + ["c"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } +} +string(55) "O:8:"stdClass":3:{S:1:"a";r:1;S:1:"b";r:1;S:1:"c";r:1;}" +object(stdClass)#%d (3) { + ["a"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } + ["b"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } + ["c"]=> + object(stdClass)#%d (3) { + ["a"]=> + *RECURSION* + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } + ["c"]=> + object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + *RECURSION* + ["c"]=> + *RECURSION* + } +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + *RECURSION* + } +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} +Done +--UEXPECTF-- +--- a refs container: +object(stdClass)#%d (3) { + [u"a"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + int(1) + [u"c"]=> + int(1) + } + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";R:1;U:1:"b";i:1;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + int(1) + [u"c"]=> + int(1) + } + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- a eqs container: +object(stdClass)#%d (3) { + [u"a"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + int(1) + [u"c"]=> + int(1) + } + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";r:1;U:1:"b";i:1;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + int(1) + [u"c"]=> + int(1) + } + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- a,b ref container: +object(stdClass)#%d (3) { + [u"a"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + int(1) + } + [u"b"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + int(1) + } + [u"c"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";R:1;U:1:"b";R:1;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + int(1) + } + [u"b"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + int(1) + } + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + &unicode(14) "obj->a.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- a,b eq container: +object(stdClass)#%d (3) { + [u"a"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + int(1) + } + [u"b"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + int(1) + } + [u"c"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";r:1;U:1:"b";r:1;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + int(1) + } + [u"b"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + int(1) + } + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + *RECURSION* + [u"c"]=> + int(1) + } + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- a,b,c ref container: +object(stdClass)#%d (3) { + [u"a"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } + [u"b"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } + [u"c"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";R:1;U:1:"b";R:1;U:1:"c";R:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } + [u"b"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } + [u"c"]=> + &object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + &unicode(14) "obj->a.changed" + [u"c"]=> + &unicode(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + &unicode(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->c.changed" + [u"b"]=> + &unicode(14) "obj->c.changed" + [u"c"]=> + &unicode(14) "obj->c.changed" +} + + +--- a,b,c eq container: +object(stdClass)#%d (3) { + [u"a"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } + [u"b"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } + [u"c"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";r:1;U:1:"b";r:1;U:1:"c";r:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } + [u"b"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } + [u"c"]=> + object(stdClass)#%d (3) { + [u"a"]=> + *RECURSION* + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } + [u"c"]=> + object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + *RECURSION* + [u"c"]=> + *RECURSION* + } +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + *RECURSION* + } +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_006.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_006.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_006.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_006.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,28 @@ +--TEST-- +Behaviour of incomplete class is preserved even when it was not created by unserialize(). +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +$a = new __PHP_Incomplete_Class; +var_dump($a); +var_dump($a->p); + +echo "Done"; +?> +--EXPECTF-- +object(__PHP_Incomplete_Class)#%d (0) { +} + +Notice: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "unknown" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in %s on line 15 +NULL +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_011.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_011.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_011.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_011.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,314 @@ +--TEST-- +Object serialization / unserialization with inherited and hidden properties. +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +Class A { + private $APriv = "A.APriv"; + protected $AProt = "A.AProt"; + public $APub = "A.APub"; + + function audit() { + return isset($this->APriv, $this->AProt, $this->APub); + } +} + +Class B extends A { + private $BPriv = "B.BPriv"; + protected $BProt = "B.BProt"; + public $BPub = "B.BPub"; + + function audit() { + return parent::audit() && isset($this->AProt, $this->APub, + $this->BPriv, $this->BProt, $this->BPub); + } +} + +Class C extends B { + private $APriv = "C.APriv"; + protected $AProt = "C.AProt"; + public $APub = "C.APub"; + + private $CPriv = "C.CPriv"; + protected $CProt = "C.BProt"; + public $CPub = "C.CPub"; + + function audit() { + return parent::audit() && isset($this->APriv, $this->AProt, $this->APub, + $this->BProt, $this->BPub, + $this->CPriv, $this->CProt, $this->CPub); + } +} + +function prettyPrint($obj) { + echo "\n\nBefore serialization:\n"; + var_dump($obj); + + echo "Serialized form:\n"; + $ser = serialize($obj); + $serPrintable = str_replace("\0", '\0', $ser); + var_dump($serPrintable); + + echo "Unserialized:\n"; + $uobj = unserialize($ser); + var_dump($uobj); + + echo "Sanity check: "; + var_dump($uobj->audit()); +} + +echo "-- Test instance of A --\n"; +prettyPrint(new A); +echo "\n\n-- Test instance of B --\n"; +prettyPrint(new B); +echo "\n\n-- Test instance of C --\n"; +prettyPrint(new C); + +echo "Done"; +?> +--EXPECTF-- +-- Test instance of A -- + + +Before serialization: +object(A)#%d (3) { + ["APriv":"A":private]=> + string(7) "A.APriv" + ["AProt":protected]=> + string(7) "A.AProt" + ["APub"]=> + string(6) "A.APub" +} +Serialized form: +string(98) "O:1:"A":3:{S:8:"\0A\0APriv";S:7:"A.APriv";S:8:"\0*\0AProt";S:7:"A.AProt";S:4:"APub";S:6:"A.APub";}" +Unserialized: +object(A)#%d (3) { + ["APriv":"A":private]=> + string(7) "A.APriv" + ["AProt":protected]=> + string(7) "A.AProt" + ["APub"]=> + string(6) "A.APub" +} +Sanity check: bool(true) + + +-- Test instance of B -- + + +Before serialization: +object(B)#%d (6) { + ["BPriv":"B":private]=> + string(7) "B.BPriv" + ["BProt":protected]=> + string(7) "B.BProt" + ["BPub"]=> + string(6) "B.BPub" + ["APriv":"A":private]=> + string(7) "A.APriv" + ["AProt":protected]=> + string(7) "A.AProt" + ["APub"]=> + string(6) "A.APub" +} +Serialized form: +string(184) "O:1:"B":6:{S:8:"\0B\0BPriv";S:7:"B.BPriv";S:8:"\0*\0BProt";S:7:"B.BProt";S:4:"BPub";S:6:"B.BPub";S:8:"\0A\0APriv";S:7:"A.APriv";S:8:"\0*\0AProt";S:7:"A.AProt";S:4:"APub";S:6:"A.APub";}" +Unserialized: +object(B)#%d (6) { + ["BPriv":"B":private]=> + string(7) "B.BPriv" + ["BProt":protected]=> + string(7) "B.BProt" + ["BPub"]=> + string(6) "B.BPub" + ["APriv":"A":private]=> + string(7) "A.APriv" + ["AProt":protected]=> + string(7) "A.AProt" + ["APub"]=> + string(6) "A.APub" +} +Sanity check: bool(true) + + +-- Test instance of C -- + + +Before serialization: +object(C)#%d (10) { + ["APriv":"C":private]=> + string(7) "C.APriv" + ["AProt":protected]=> + string(7) "C.AProt" + ["APub"]=> + string(6) "C.APub" + ["CPriv":"C":private]=> + string(7) "C.CPriv" + ["CProt":protected]=> + string(7) "C.BProt" + ["CPub"]=> + string(6) "C.CPub" + ["BPriv":"B":private]=> + string(7) "B.BPriv" + ["BProt":protected]=> + string(7) "B.BProt" + ["BPub"]=> + string(6) "B.BPub" + ["APriv":"A":private]=> + string(7) "A.APriv" +} +Serialized form: +string(302) "O:1:"C":10:{S:8:"\0C\0APriv";S:7:"C.APriv";S:8:"\0*\0AProt";S:7:"C.AProt";S:4:"APub";S:6:"C.APub";S:8:"\0C\0CPriv";S:7:"C.CPriv";S:8:"\0*\0CProt";S:7:"C.BProt";S:4:"CPub";S:6:"C.CPub";S:8:"\0B\0BPriv";S:7:"B.BPriv";S:8:"\0*\0BProt";S:7:"B.BProt";S:4:"BPub";S:6:"B.BPub";S:8:"\0A\0APriv";S:7:"A.APriv";}" +Unserialized: +object(C)#%d (10) { + ["APriv":"C":private]=> + string(7) "C.APriv" + ["AProt":protected]=> + string(7) "C.AProt" + ["APub"]=> + string(6) "C.APub" + ["CPriv":"C":private]=> + string(7) "C.CPriv" + ["CProt":protected]=> + string(7) "C.BProt" + ["CPub"]=> + string(6) "C.CPub" + ["BPriv":"B":private]=> + string(7) "B.BPriv" + ["BProt":protected]=> + string(7) "B.BProt" + ["BPub"]=> + string(6) "B.BPub" + ["APriv":"A":private]=> + string(7) "A.APriv" +} +Sanity check: bool(true) +Done +--UEXPECTF-- +-- Test instance of A -- + + +Before serialization: +object(A)#%d (3) { + [u"APriv":u"A":private]=> + unicode(7) "A.APriv" + [u"AProt":protected]=> + unicode(7) "A.AProt" + [u"APub"]=> + unicode(6) "A.APub" +} +Serialized form: +unicode(98) "O:1:"A":3:{U:8:"\0A\0APriv";U:7:"A.APriv";U:8:"\0*\0AProt";U:7:"A.AProt";U:4:"APub";U:6:"A.APub";}" +Unserialized: +object(A)#%d (3) { + [u"APriv":u"A":private]=> + unicode(7) "A.APriv" + [u"AProt":protected]=> + unicode(7) "A.AProt" + [u"APub"]=> + unicode(6) "A.APub" +} +Sanity check: bool(true) + + +-- Test instance of B -- + + +Before serialization: +object(B)#%d (6) { + [u"BPriv":u"B":private]=> + unicode(7) "B.BPriv" + [u"BProt":protected]=> + unicode(7) "B.BProt" + [u"BPub"]=> + unicode(6) "B.BPub" + [u"APriv":u"A":private]=> + unicode(7) "A.APriv" + [u"AProt":protected]=> + unicode(7) "A.AProt" + [u"APub"]=> + unicode(6) "A.APub" +} +Serialized form: +unicode(184) "O:1:"B":6:{U:8:"\0B\0BPriv";U:7:"B.BPriv";U:8:"\0*\0BProt";U:7:"B.BProt";U:4:"BPub";U:6:"B.BPub";U:8:"\0A\0APriv";U:7:"A.APriv";U:8:"\0*\0AProt";U:7:"A.AProt";U:4:"APub";U:6:"A.APub";}" +Unserialized: +object(B)#%d (6) { + [u"BPriv":u"B":private]=> + unicode(7) "B.BPriv" + [u"BProt":protected]=> + unicode(7) "B.BProt" + [u"BPub"]=> + unicode(6) "B.BPub" + [u"APriv":u"A":private]=> + unicode(7) "A.APriv" + [u"AProt":protected]=> + unicode(7) "A.AProt" + [u"APub"]=> + unicode(6) "A.APub" +} +Sanity check: bool(true) + + +-- Test instance of C -- + + +Before serialization: +object(C)#%d (10) { + [u"APriv":u"C":private]=> + unicode(7) "C.APriv" + [u"AProt":protected]=> + unicode(7) "C.AProt" + [u"APub"]=> + unicode(6) "C.APub" + [u"CPriv":u"C":private]=> + unicode(7) "C.CPriv" + [u"CProt":protected]=> + unicode(7) "C.BProt" + [u"CPub"]=> + unicode(6) "C.CPub" + [u"BPriv":u"B":private]=> + unicode(7) "B.BPriv" + [u"BProt":protected]=> + unicode(7) "B.BProt" + [u"BPub"]=> + unicode(6) "B.BPub" + [u"APriv":u"A":private]=> + unicode(7) "A.APriv" +} +Serialized form: +unicode(302) "O:1:"C":10:{U:8:"\0C\0APriv";U:7:"C.APriv";U:8:"\0*\0AProt";U:7:"C.AProt";U:4:"APub";U:6:"C.APub";U:8:"\0C\0CPriv";U:7:"C.CPriv";U:8:"\0*\0CProt";U:7:"C.BProt";U:4:"CPub";U:6:"C.CPub";U:8:"\0B\0BPriv";U:7:"B.BPriv";U:8:"\0*\0BProt";U:7:"B.BProt";U:4:"BPub";U:6:"B.BPub";U:8:"\0A\0APriv";U:7:"A.APriv";}" +Unserialized: +object(C)#%d (10) { + [u"APriv":u"C":private]=> + unicode(7) "C.APriv" + [u"AProt":protected]=> + unicode(7) "C.AProt" + [u"APub"]=> + unicode(6) "C.APub" + [u"CPriv":u"C":private]=> + unicode(7) "C.CPriv" + [u"CProt":protected]=> + unicode(7) "C.BProt" + [u"CPub"]=> + unicode(6) "C.CPub" + [u"BPriv":u"B":private]=> + unicode(7) "B.BPriv" + [u"BProt":protected]=> + unicode(7) "B.BProt" + [u"BPub"]=> + unicode(6) "B.BPub" + [u"APriv":u"A":private]=> + unicode(7) "A.APriv" +} +Sanity check: bool(true) +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_003.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_003.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_003.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_003.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,82 @@ +--TEST-- +Test serialize() & unserialize() functions: objects (abstract classes) +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +echo "\n--- Testing Abstract Class ---\n"; +// abstract class +abstract class Name +{ + public function Name() { + $this->a = 10; + $this->b = 12.222; + $this->c = "string"; + } + abstract protected function getClassName(); + public function printClassName () { + return $this->getClassName(); + } +} +// implement abstract class +class extendName extends Name +{ + var $a, $b, $c; + + protected function getClassName() { + return "extendName"; + } +} + +$obj_extendName = new extendName(); +$serialize_data = serialize($obj_extendName); +var_dump( $serialize_data ); +$unserialize_data = unserialize($serialize_data); +var_dump( $unserialize_data ); + +$serialize_data = serialize($obj_extendName->printClassName()); +var_dump( $serialize_data ); +$unserialize_data = unserialize($serialize_data); +var_dump( $unserialize_data ); + +echo "\nDone"; +?> +--EXPECTF-- +--- Testing Abstract Class --- +string(119) "O:10:"extendName":3:{S:1:"a";i:10;S:1:"b";d:12.2219999999999995310417943983338773250579833984375;S:1:"c";S:6:"string";}" +object(extendName)#%d (3) { + ["a"]=> + int(10) + ["b"]=> + float(12.222) + ["c"]=> + string(6) "string" +} +string(18) "S:10:"extendName";" +string(10) "extendName" + +Done +--UEXPECTF-- +--- Testing Abstract Class --- +unicode(119) "O:10:"extendName":3:{U:1:"a";i:10;U:1:"b";d:12.2219999999999995310417943983338773250579833984375;U:1:"c";U:6:"string";}" +object(extendName)#%d (3) { + [u"a"]=> + int(10) + [u"b"]=> + float(12.222) + [u"c"]=> + unicode(6) "string" +} +unicode(18) "U:10:"extendName";" +unicode(10) "extendName" + +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_arrays_002.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_arrays_002.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_arrays_002.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_arrays_002.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,986 @@ +--TEST-- +serialization: arrays with references amonst elements +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +function check(&$a) { + var_dump($a); + $ser = serialize($a); + var_dump($ser); + + $b = unserialize($ser); + var_dump($b); + $b[0] = "b0.changed"; + var_dump($b); + $b[1] = "b1.changed"; + var_dump($b); + $b[2] = "b2.changed"; + var_dump($b); +} + +echo "\n\n--- No references:\n"; +$a = array(); +$a[0] = 1; +$a[1] = 1; +$a[2] = 1; +check($a); + +echo "\n\n--- 0 refs 1:\n"; +$a = array(); +$a[0] = &$a[1]; +$a[1] = 1; +$a[2] = 1; +check($a); + +echo "\n\n--- 0 refs 2:\n"; +$a = array(); +$a[0] = &$a[2]; +$a[1] = 1; +$a[2] = 1; +check($a); + +echo "\n\n--- 1 refs 0:\n"; +$a = array(); +$a[0] = 1; +$a[1] = &$a[0]; +$a[2] = 1; +check($a); + +echo "\n\n--- 1 refs 2:\n"; +$a = array(); +$a[0] = 1; +$a[1] = &$a[2]; +$a[2] = 1; +check($a); + +echo "\n\n--- 2 refs 0:\n"; +$a = array(); +$a[0] = 1; +$a[1] = 1; +$a[2] = &$a[0]; +check($a); + +echo "\n\n--- 2 refs 1:\n"; +$a = array(); +$a[0] = 1; +$a[1] = 1; +$a[2] = &$a[1]; +check($a); + +echo "\n\n--- 0,1 ref 2:\n"; +$a = array(); +$a[0] = &$a[2]; +$a[1] = &$a[2]; +$a[2] = 1; +check($a); + +echo "\n\n--- 0,2 ref 1:\n"; +$a = array(); +$a[0] = &$a[1]; +$a[1] = 1; +$a[2] = &$a[1]; +check($a); + +echo "\n\n--- 1,2 ref 0:\n"; +$a = array(); +$a[0] = 1; +$a[1] = &$a[0]; +$a[2] = &$a[0]; +check($a); + +echo "Done"; +?> +--EXPECTF-- + + +--- No references: +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +string(30) "a:3:{i:0;i:1;i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + string(10) "b2.changed" +} + + +--- 0 refs 1: +array(3) { + [1]=> + &int(1) + [0]=> + &int(1) + [2]=> + int(1) +} +string(30) "a:3:{i:1;i:1;i:0;R:2;i:2;i:1;}" +array(3) { + [1]=> + &int(1) + [0]=> + &int(1) + [2]=> + int(1) +} +array(3) { + [1]=> + &string(10) "b0.changed" + [0]=> + &string(10) "b0.changed" + [2]=> + int(1) +} +array(3) { + [1]=> + &string(10) "b1.changed" + [0]=> + &string(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [1]=> + &string(10) "b1.changed" + [0]=> + &string(10) "b1.changed" + [2]=> + string(10) "b2.changed" +} + + +--- 0 refs 2: +array(3) { + [2]=> + &int(1) + [0]=> + &int(1) + [1]=> + int(1) +} +string(30) "a:3:{i:2;i:1;i:0;R:2;i:1;i:1;}" +array(3) { + [2]=> + &int(1) + [0]=> + &int(1) + [1]=> + int(1) +} +array(3) { + [2]=> + &string(10) "b0.changed" + [0]=> + &string(10) "b0.changed" + [1]=> + int(1) +} +array(3) { + [2]=> + &string(10) "b0.changed" + [0]=> + &string(10) "b0.changed" + [1]=> + string(10) "b1.changed" +} +array(3) { + [2]=> + &string(10) "b2.changed" + [0]=> + &string(10) "b2.changed" + [1]=> + string(10) "b1.changed" +} + + +--- 1 refs 0: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +string(30) "a:3:{i:0;i:1;i:1;R:2;i:2;i:1;}" +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b0.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + string(10) "b2.changed" +} + + +--- 1 refs 2: +array(3) { + [0]=> + int(1) + [2]=> + &int(1) + [1]=> + &int(1) +} +string(30) "a:3:{i:0;i:1;i:2;i:1;i:1;R:3;}" +array(3) { + [0]=> + int(1) + [2]=> + &int(1) + [1]=> + &int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [2]=> + &int(1) + [1]=> + &int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [2]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" +} +array(3) { + [0]=> + string(10) "b0.changed" + [2]=> + &string(10) "b2.changed" + [1]=> + &string(10) "b2.changed" +} + + +--- 2 refs 0: +array(3) { + [0]=> + &int(1) + [1]=> + int(1) + [2]=> + &int(1) +} +string(30) "a:3:{i:0;i:1;i:1;i:1;i:2;R:2;}" +array(3) { + [0]=> + &int(1) + [1]=> + int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + int(1) + [2]=> + &string(10) "b0.changed" +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + &string(10) "b0.changed" +} +array(3) { + [0]=> + &string(10) "b2.changed" + [1]=> + string(10) "b1.changed" + [2]=> + &string(10) "b2.changed" +} + + +--- 2 refs 1: +array(3) { + [0]=> + int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +string(30) "a:3:{i:0;i:1;i:1;i:1;i:2;R:3;}" +array(3) { + [0]=> + int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + &string(10) "b1.changed" +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + &string(10) "b2.changed" + [2]=> + &string(10) "b2.changed" +} + + +--- 0,1 ref 2: +array(3) { + [2]=> + &int(1) + [0]=> + &int(1) + [1]=> + &int(1) +} +string(30) "a:3:{i:2;i:1;i:0;R:2;i:1;R:2;}" +array(3) { + [2]=> + &int(1) + [0]=> + &int(1) + [1]=> + &int(1) +} +array(3) { + [2]=> + &string(10) "b0.changed" + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b0.changed" +} +array(3) { + [2]=> + &string(10) "b1.changed" + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" +} +array(3) { + [2]=> + &string(10) "b2.changed" + [0]=> + &string(10) "b2.changed" + [1]=> + &string(10) "b2.changed" +} + + +--- 0,2 ref 1: +array(3) { + [1]=> + &int(1) + [0]=> + &int(1) + [2]=> + &int(1) +} +string(30) "a:3:{i:1;i:1;i:0;R:2;i:2;R:2;}" +array(3) { + [1]=> + &int(1) + [0]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [1]=> + &string(10) "b0.changed" + [0]=> + &string(10) "b0.changed" + [2]=> + &string(10) "b0.changed" +} +array(3) { + [1]=> + &string(10) "b1.changed" + [0]=> + &string(10) "b1.changed" + [2]=> + &string(10) "b1.changed" +} +array(3) { + [1]=> + &string(10) "b2.changed" + [0]=> + &string(10) "b2.changed" + [2]=> + &string(10) "b2.changed" +} + + +--- 1,2 ref 0: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +string(30) "a:3:{i:0;i:1;i:1;R:2;i:2;R:2;}" +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b0.changed" + [2]=> + &string(10) "b0.changed" +} +array(3) { + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + &string(10) "b1.changed" +} +array(3) { + [0]=> + &string(10) "b2.changed" + [1]=> + &string(10) "b2.changed" + [2]=> + &string(10) "b2.changed" +} +Done +--UEXPECTF-- + + +--- No references: +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + unicode(10) "b2.changed" +} + + +--- 0 refs 1: +array(3) { + [1]=> + &int(1) + [0]=> + &int(1) + [2]=> + int(1) +} +unicode(30) "a:3:{i:1;i:1;i:0;R:2;i:2;i:1;}" +array(3) { + [1]=> + &int(1) + [0]=> + &int(1) + [2]=> + int(1) +} +array(3) { + [1]=> + &unicode(10) "b0.changed" + [0]=> + &unicode(10) "b0.changed" + [2]=> + int(1) +} +array(3) { + [1]=> + &unicode(10) "b1.changed" + [0]=> + &unicode(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [1]=> + &unicode(10) "b1.changed" + [0]=> + &unicode(10) "b1.changed" + [2]=> + unicode(10) "b2.changed" +} + + +--- 0 refs 2: +array(3) { + [2]=> + &int(1) + [0]=> + &int(1) + [1]=> + int(1) +} +unicode(30) "a:3:{i:2;i:1;i:0;R:2;i:1;i:1;}" +array(3) { + [2]=> + &int(1) + [0]=> + &int(1) + [1]=> + int(1) +} +array(3) { + [2]=> + &unicode(10) "b0.changed" + [0]=> + &unicode(10) "b0.changed" + [1]=> + int(1) +} +array(3) { + [2]=> + &unicode(10) "b0.changed" + [0]=> + &unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" +} +array(3) { + [2]=> + &unicode(10) "b2.changed" + [0]=> + &unicode(10) "b2.changed" + [1]=> + unicode(10) "b1.changed" +} + + +--- 1 refs 0: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;R:2;i:2;i:1;}" +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b0.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + unicode(10) "b2.changed" +} + + +--- 1 refs 2: +array(3) { + [0]=> + int(1) + [2]=> + &int(1) + [1]=> + &int(1) +} +unicode(30) "a:3:{i:0;i:1;i:2;i:1;i:1;R:3;}" +array(3) { + [0]=> + int(1) + [2]=> + &int(1) + [1]=> + &int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [2]=> + &int(1) + [1]=> + &int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [2]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [2]=> + &unicode(10) "b2.changed" + [1]=> + &unicode(10) "b2.changed" +} + + +--- 2 refs 0: +array(3) { + [0]=> + &int(1) + [1]=> + int(1) + [2]=> + &int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;i:1;i:2;R:2;}" +array(3) { + [0]=> + &int(1) + [1]=> + int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + int(1) + [2]=> + &unicode(10) "b0.changed" +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + &unicode(10) "b0.changed" +} +array(3) { + [0]=> + &unicode(10) "b2.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + &unicode(10) "b2.changed" +} + + +--- 2 refs 1: +array(3) { + [0]=> + int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;i:1;i:2;R:3;}" +array(3) { + [0]=> + int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + &unicode(10) "b1.changed" +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + &unicode(10) "b2.changed" + [2]=> + &unicode(10) "b2.changed" +} + + +--- 0,1 ref 2: +array(3) { + [2]=> + &int(1) + [0]=> + &int(1) + [1]=> + &int(1) +} +unicode(30) "a:3:{i:2;i:1;i:0;R:2;i:1;R:2;}" +array(3) { + [2]=> + &int(1) + [0]=> + &int(1) + [1]=> + &int(1) +} +array(3) { + [2]=> + &unicode(10) "b0.changed" + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b0.changed" +} +array(3) { + [2]=> + &unicode(10) "b1.changed" + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" +} +array(3) { + [2]=> + &unicode(10) "b2.changed" + [0]=> + &unicode(10) "b2.changed" + [1]=> + &unicode(10) "b2.changed" +} + + +--- 0,2 ref 1: +array(3) { + [1]=> + &int(1) + [0]=> + &int(1) + [2]=> + &int(1) +} +unicode(30) "a:3:{i:1;i:1;i:0;R:2;i:2;R:2;}" +array(3) { + [1]=> + &int(1) + [0]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [1]=> + &unicode(10) "b0.changed" + [0]=> + &unicode(10) "b0.changed" + [2]=> + &unicode(10) "b0.changed" +} +array(3) { + [1]=> + &unicode(10) "b1.changed" + [0]=> + &unicode(10) "b1.changed" + [2]=> + &unicode(10) "b1.changed" +} +array(3) { + [1]=> + &unicode(10) "b2.changed" + [0]=> + &unicode(10) "b2.changed" + [2]=> + &unicode(10) "b2.changed" +} + + +--- 1,2 ref 0: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;R:2;i:2;R:2;}" +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b0.changed" + [2]=> + &unicode(10) "b0.changed" +} +array(3) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + &unicode(10) "b1.changed" +} +array(3) { + [0]=> + &unicode(10) "b2.changed" + [1]=> + &unicode(10) "b2.changed" + [2]=> + &unicode(10) "b2.changed" +} +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_arrays_001.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_arrays_001.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_arrays_001.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_arrays_001.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,177 @@ +--TEST-- +Test serialize() & unserialize() functions: arrays (circular references) +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +echo "\n--- Testing Circular reference of an array ---\n"; + +echo "-- Normal array --\n"; +$arr_circ = array(0, 1, -2, 3.333333, "a", array(), &$arr_circ); +$serialize_data = serialize($arr_circ); +var_dump( $serialize_data ); +$arr_circ = unserialize($serialize_data); +var_dump( $arr_circ ); + +echo "\n-- Associative array --\n"; +$arr_asso = array("a" => "test"); +$arr_asso[ "b" ] = &$arr_asso[ "a" ]; +var_dump($arr_asso); +$serialize_data = serialize($arr_asso); +var_dump($serialize_data); +$arr_asso = unserialize($serialize_data); +var_dump($arr_asso); + +echo "\nDone"; +?> +--EXPECTF-- + +--- Testing Circular reference of an array --- +-- Normal array -- +string(238) "a:7:{i:0;i:0;i:1;i:1;i:2;i:-2;i:3;d:3.333333000000000101437080957111902534961700439453125;i:4;S:1:"a";i:5;a:0:{}i:6;a:7:{i:0;i:0;i:1;i:1;i:2;i:-2;i:3;d:3.333333000000000101437080957111902534961700439453125;i:4;S:1:"a";i:5;a:0:{}i:6;R:8;}}" +array(7) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(-2) + [3]=> + float(3.333333) + [4]=> + string(1) "a" + [5]=> + array(0) { + } + [6]=> + &array(7) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(-2) + [3]=> + float(3.333333) + [4]=> + string(1) "a" + [5]=> + array(0) { + } + [6]=> + &array(7) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(-2) + [3]=> + float(3.333333) + [4]=> + string(1) "a" + [5]=> + array(0) { + } + [6]=> + *RECURSION* + } + } +} + +-- Associative array -- +array(2) { + ["a"]=> + &string(4) "test" + ["b"]=> + &string(4) "test" +} +string(37) "a:2:{S:1:"a";S:4:"test";S:1:"b";R:2;}" +array(2) { + ["a"]=> + &string(4) "test" + ["b"]=> + &string(4) "test" +} + +Done +--UEXPECTF-- + +--- Testing Circular reference of an array --- +-- Normal array -- +unicode(238) "a:7:{i:0;i:0;i:1;i:1;i:2;i:-2;i:3;d:3.333333000000000101437080957111902534961700439453125;i:4;U:1:"a";i:5;a:0:{}i:6;a:7:{i:0;i:0;i:1;i:1;i:2;i:-2;i:3;d:3.333333000000000101437080957111902534961700439453125;i:4;U:1:"a";i:5;a:0:{}i:6;R:8;}}" +array(7) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(-2) + [3]=> + float(3.333333) + [4]=> + unicode(1) "a" + [5]=> + array(0) { + } + [6]=> + &array(7) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(-2) + [3]=> + float(3.333333) + [4]=> + unicode(1) "a" + [5]=> + array(0) { + } + [6]=> + &array(7) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(-2) + [3]=> + float(3.333333) + [4]=> + unicode(1) "a" + [5]=> + array(0) { + } + [6]=> + *RECURSION* + } + } +} + +-- Associative array -- +array(2) { + [u"a"]=> + &unicode(4) "test" + [u"b"]=> + &unicode(4) "test" +} +unicode(37) "a:2:{U:1:"a";U:4:"test";U:1:"b";R:2;}" +array(2) { + [u"a"]=> + &unicode(4) "test" + [u"b"]=> + &unicode(4) "test" +} + +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_007.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_007.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_007.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_007.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,53 @@ +--TEST-- +Ensure __autoload is called twice if unserialize_callback_func is defined. +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +function __autoload($name) { + echo "in __autoload($name)\n"; +} + +ini_set('unserialize_callback_func','check'); + +function check($name) { + echo "in check($name)\n"; +} + +$o = unserialize('O:3:"FOO":0:{}'); + +var_dump($o); + +echo "Done"; +?> +--EXPECTF-- +in __autoload(FOO) +in check(FOO) +in __autoload(FOO) + +Warning: unserialize(): Function check() hasn't defined the class it was called for in %s on line 23 +object(__PHP_Incomplete_Class)#%d (1) { + ["__PHP_Incomplete_Class_Name"]=> + string(3) "FOO" +} +Done +--UEXPECTF-- +in __autoload(FOO) +in check(FOO) +in __autoload(FOO) + +Warning: unserialize(): Function check() hasn't defined the class it was called for in %s on line 23 +object(__PHP_Incomplete_Class)#%d (1) { + [u"__PHP_Incomplete_Class_Name"]=> + unicode(3) "FOO" +} +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_miscTypes_001.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_miscTypes_001.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_miscTypes_001.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_miscTypes_001.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,584 @@ +--TEST-- +Test serialize() & unserialize() functions: many types +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + + +echo "--- Testing Various Types ---\n"; + +/* unset variable */ +$unset_var = 10; +unset($unset_var); +/* array declaration */ +$arr_var = array(0, 1, -2, 3.333333, "a", array(), array(NULL)); + +$Variation_arr = array( + /* Integers */ + 2147483647, + -2147483647, + 2147483648, + -2147483648, + + 0xFF00123, // hex integers + -0xFF00123, + 0x7FFFFFFF, + -0x7FFFFFFF, + 0x80000000, + -0x80000000, + + 01234567, // octal integers + -01234567, + + /* arrays */ + array(), // zero elements + array(1, 2, 3, 12345666, -2344), + array(0, 1, 2, 3.333, -4, -5.555, TRUE, FALSE, NULL, "", '', " ", + array(), array(1,2,array()), "string", new stdclass + ), + &$arr_var, // Reference to an array + + /* nulls */ + NULL, + null, + + /* strings */ + "", + '', + " ", + ' ', + "a", + "string", + 'string', + "hello\0", + 'hello\0', + "123", + '123', + '\t', + "\t", + + /* booleans */ + TRUE, + true, + FALSE, + false, + + /* Mixed types */ + @TRUE123, + "123string", + "string123", + "NULLstring", + + /* unset/undefined vars */ + @$unset_var, + @$undefined_var, +); + +/* Loop through to test each element in the above array */ +for( $i = 0; $i < count($Variation_arr); $i++ ) { + + echo "\n-- Iteration $i --\n"; + echo "after serialization => "; + $serialize_data = serialize($Variation_arr[$i]); + var_dump( $serialize_data ); + + echo "after unserialization => "; + $unserialize_data = unserialize($serialize_data); + var_dump( $unserialize_data ); +} + +echo "\nDone"; +?> +--EXPECTF-- +--- Testing Various Types --- + +-- Iteration 0 -- +after serialization => string(13) "i:2147483647;" +after unserialization => int(2147483647) + +-- Iteration 1 -- +after serialization => string(14) "i:-2147483647;" +after unserialization => int(-2147483647) + +-- Iteration 2 -- +after serialization => string(13) "d:2147483648;" +after unserialization => float(2147483648) + +-- Iteration 3 -- +after serialization => string(14) "d:-2147483648;" +after unserialization => float(-2147483648) + +-- Iteration 4 -- +after serialization => string(12) "i:267387171;" +after unserialization => int(267387171) + +-- Iteration 5 -- +after serialization => string(13) "i:-267387171;" +after unserialization => int(-267387171) + +-- Iteration 6 -- +after serialization => string(13) "i:2147483647;" +after unserialization => int(2147483647) + +-- Iteration 7 -- +after serialization => string(14) "i:-2147483647;" +after unserialization => int(-2147483647) + +-- Iteration 8 -- +after serialization => string(13) "d:2147483648;" +after unserialization => float(2147483648) + +-- Iteration 9 -- +after serialization => string(14) "d:-2147483648;" +after unserialization => float(-2147483648) + +-- Iteration 10 -- +after serialization => string(9) "i:342391;" +after unserialization => int(342391) + +-- Iteration 11 -- +after serialization => string(10) "i:-342391;" +after unserialization => int(-342391) + +-- Iteration 12 -- +after serialization => string(6) "a:0:{}" +after unserialization => array(0) { +} + +-- Iteration 13 -- +after serialization => string(57) "a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:12345666;i:4;i:-2344;}" +after unserialization => array(5) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) + [3]=> + int(12345666) + [4]=> + int(-2344) +} + +-- Iteration 14 -- +after serialization => string(303) "a:16:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;d:3.3330000000000001847411112976260483264923095703125;i:4;i:-4;i:5;d:-5.55499999999999971578290569595992565155029296875;i:6;b:1;i:7;b:0;i:8;N;i:9;S:0:"";i:10;S:0:"";i:11;S:1:" ";i:12;a:0:{}i:13;a:3:{i:0;i:1;i:1;i:2;i:2;a:0:{}}i:14;S:6:"string";i:15;O:8:"stdClass":0:{}}" +after unserialization => array(16) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(2) + [3]=> + float(3.333) + [4]=> + int(-4) + [5]=> + float(-5.555) + [6]=> + bool(true) + [7]=> + bool(false) + [8]=> + NULL + [9]=> + string(0) "" + [10]=> + string(0) "" + [11]=> + string(1) " " + [12]=> + array(0) { + } + [13]=> + array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + array(0) { + } + } + [14]=> + string(6) "string" + [15]=> + object(stdClass)#2 (0) { + } +} + +-- Iteration 15 -- +after serialization => string(129) "a:7:{i:0;i:0;i:1;i:1;i:2;i:-2;i:3;d:3.333333000000000101437080957111902534961700439453125;i:4;S:1:"a";i:5;a:0:{}i:6;a:1:{i:0;N;}}" +after unserialization => array(7) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(-2) + [3]=> + float(3.333333) + [4]=> + string(1) "a" + [5]=> + array(0) { + } + [6]=> + array(1) { + [0]=> + NULL + } +} + +-- Iteration 16 -- +after serialization => string(2) "N;" +after unserialization => NULL + +-- Iteration 17 -- +after serialization => string(2) "N;" +after unserialization => NULL + +-- Iteration 18 -- +after serialization => string(7) "S:0:"";" +after unserialization => string(0) "" + +-- Iteration 19 -- +after serialization => string(7) "S:0:"";" +after unserialization => string(0) "" + +-- Iteration 20 -- +after serialization => string(8) "S:1:" ";" +after unserialization => string(1) " " + +-- Iteration 21 -- +after serialization => string(8) "S:1:" ";" +after unserialization => string(1) " " + +-- Iteration 22 -- +after serialization => string(8) "S:1:"a";" +after unserialization => string(1) "a" + +-- Iteration 23 -- +after serialization => string(13) "S:6:"string";" +after unserialization => string(6) "string" + +-- Iteration 24 -- +after serialization => string(13) "S:6:"string";" +after unserialization => string(6) "string" + +-- Iteration 25 -- +after serialization => string(13) "S:6:"hello+after unserialization => string(6) "hello+ +-- Iteration 26 -- +after serialization => string(16) "S:7:"hello\5c0";" +after unserialization => string(7) "hello\0" + +-- Iteration 27 -- +after serialization => string(10) "S:3:"123";" +after unserialization => string(3) "123" + +-- Iteration 28 -- +after serialization => string(10) "S:3:"123";" +after unserialization => string(3) "123" + +-- Iteration 29 -- +after serialization => string(11) "S:2:"\5ct";" +after unserialization => string(2) "\t" + +-- Iteration 30 -- +after serialization => string(8) "S:1:" ";" +after unserialization => string(1) " " + +-- Iteration 31 -- +after serialization => string(4) "b:1;" +after unserialization => bool(true) + +-- Iteration 32 -- +after serialization => string(4) "b:1;" +after unserialization => bool(true) + +-- Iteration 33 -- +after serialization => string(4) "b:0;" +after unserialization => bool(false) + +-- Iteration 34 -- +after serialization => string(4) "b:0;" +after unserialization => bool(false) + +-- Iteration 35 -- +after serialization => string(14) "S:7:"TRUE123";" +after unserialization => string(7) "TRUE123" + +-- Iteration 36 -- +after serialization => string(16) "S:9:"123string";" +after unserialization => string(9) "123string" + +-- Iteration 37 -- +after serialization => string(16) "S:9:"string123";" +after unserialization => string(9) "string123" + +-- Iteration 38 -- +after serialization => string(18) "S:10:"NULLstring";" +after unserialization => string(10) "NULLstring" + +-- Iteration 39 -- +after serialization => string(2) "N;" +after unserialization => NULL + +-- Iteration 40 -- +after serialization => string(2) "N;" +after unserialization => NULL + +Done +--UEXPECTF-- +--- Testing Various Types --- + +-- Iteration 0 -- +after serialization => unicode(13) "i:2147483647;" +after unserialization => int(2147483647) + +-- Iteration 1 -- +after serialization => unicode(14) "i:-2147483647;" +after unserialization => int(-2147483647) + +-- Iteration 2 -- +after serialization => unicode(13) "d:2147483648;" +after unserialization => float(2147483648) + +-- Iteration 3 -- +after serialization => unicode(14) "d:-2147483648;" +after unserialization => float(-2147483648) + +-- Iteration 4 -- +after serialization => unicode(12) "i:267387171;" +after unserialization => int(267387171) + +-- Iteration 5 -- +after serialization => unicode(13) "i:-267387171;" +after unserialization => int(-267387171) + +-- Iteration 6 -- +after serialization => unicode(13) "i:2147483647;" +after unserialization => int(2147483647) + +-- Iteration 7 -- +after serialization => unicode(14) "i:-2147483647;" +after unserialization => int(-2147483647) + +-- Iteration 8 -- +after serialization => unicode(13) "d:2147483648;" +after unserialization => float(2147483648) + +-- Iteration 9 -- +after serialization => unicode(14) "d:-2147483648;" +after unserialization => float(-2147483648) + +-- Iteration 10 -- +after serialization => unicode(9) "i:342391;" +after unserialization => int(342391) + +-- Iteration 11 -- +after serialization => unicode(10) "i:-342391;" +after unserialization => int(-342391) + +-- Iteration 12 -- +after serialization => unicode(6) "a:0:{}" +after unserialization => array(0) { +} + +-- Iteration 13 -- +after serialization => unicode(57) "a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:12345666;i:4;i:-2344;}" +after unserialization => array(5) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) + [3]=> + int(12345666) + [4]=> + int(-2344) +} + +-- Iteration 14 -- +after serialization => unicode(303) "a:16:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;d:3.3330000000000001847411112976260483264923095703125;i:4;i:-4;i:5;d:-5.55499999999999971578290569595992565155029296875;i:6;b:1;i:7;b:0;i:8;N;i:9;U:0:"";i:10;U:0:"";i:11;U:1:" ";i:12;a:0:{}i:13;a:3:{i:0;i:1;i:1;i:2;i:2;a:0:{}}i:14;U:6:"string";i:15;O:8:"stdClass":0:{}}" +after unserialization => array(16) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(2) + [3]=> + float(3.333) + [4]=> + int(-4) + [5]=> + float(-5.555) + [6]=> + bool(true) + [7]=> + bool(false) + [8]=> + NULL + [9]=> + unicode(0) "" + [10]=> + unicode(0) "" + [11]=> + unicode(1) " " + [12]=> + array(0) { + } + [13]=> + array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + array(0) { + } + } + [14]=> + unicode(6) "string" + [15]=> + object(stdClass)#2 (0) { + } +} + +-- Iteration 15 -- +after serialization => unicode(129) "a:7:{i:0;i:0;i:1;i:1;i:2;i:-2;i:3;d:3.333333000000000101437080957111902534961700439453125;i:4;U:1:"a";i:5;a:0:{}i:6;a:1:{i:0;N;}}" +after unserialization => array(7) { + [0]=> + int(0) + [1]=> + int(1) + [2]=> + int(-2) + [3]=> + float(3.333333) + [4]=> + unicode(1) "a" + [5]=> + array(0) { + } + [6]=> + array(1) { + [0]=> + NULL + } +} + +-- Iteration 16 -- +after serialization => unicode(2) "N;" +after unserialization => NULL + +-- Iteration 17 -- +after serialization => unicode(2) "N;" +after unserialization => NULL + +-- Iteration 18 -- +after serialization => unicode(7) "U:0:"";" +after unserialization => unicode(0) "" + +-- Iteration 19 -- +after serialization => unicode(7) "U:0:"";" +after unserialization => unicode(0) "" + +-- Iteration 20 -- +after serialization => unicode(8) "U:1:" ";" +after unserialization => unicode(1) " " + +-- Iteration 21 -- +after serialization => unicode(8) "U:1:" ";" +after unserialization => unicode(1) " " + +-- Iteration 22 -- +after serialization => unicode(8) "U:1:"a";" +after unserialization => unicode(1) "a" + +-- Iteration 23 -- +after serialization => unicode(13) "U:6:"string";" +after unserialization => unicode(6) "string" + +-- Iteration 24 -- +after serialization => unicode(13) "U:6:"string";" +after unserialization => unicode(6) "string" + +-- Iteration 25 -- +after serialization => unicode(13) "U:6:"hello+after unserialization => unicode(6) "hello+ +-- Iteration 26 -- +after serialization => unicode(18) "U:7:"hello\005c0";" +after unserialization => unicode(7) "hello\0" + +-- Iteration 27 -- +after serialization => unicode(10) "U:3:"123";" +after unserialization => unicode(3) "123" + +-- Iteration 28 -- +after serialization => unicode(10) "U:3:"123";" +after unserialization => unicode(3) "123" + +-- Iteration 29 -- +after serialization => unicode(13) "U:2:"\005ct";" +after unserialization => unicode(2) "\t" + +-- Iteration 30 -- +after serialization => unicode(8) "U:1:" ";" +after unserialization => unicode(1) " " + +-- Iteration 31 -- +after serialization => unicode(4) "b:1;" +after unserialization => bool(true) + +-- Iteration 32 -- +after serialization => unicode(4) "b:1;" +after unserialization => bool(true) + +-- Iteration 33 -- +after serialization => unicode(4) "b:0;" +after unserialization => bool(false) + +-- Iteration 34 -- +after serialization => unicode(4) "b:0;" +after unserialization => bool(false) + +-- Iteration 35 -- +after serialization => unicode(14) "U:7:"TRUE123";" +after unserialization => unicode(7) "TRUE123" + +-- Iteration 36 -- +after serialization => unicode(16) "U:9:"123string";" +after unserialization => unicode(9) "123string" + +-- Iteration 37 -- +after serialization => unicode(16) "U:9:"string123";" +after unserialization => unicode(9) "string123" + +-- Iteration 38 -- +after serialization => unicode(18) "U:10:"NULLstring";" +after unserialization => unicode(10) "NULLstring" + +-- Iteration 39 -- +after serialization => unicode(2) "N;" +after unserialization => NULL + +-- Iteration 40 -- +after serialization => unicode(2) "N;" +after unserialization => NULL + +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_014.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_014.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_014.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_014.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,515 @@ +--TEST-- +Object serialization / unserialization: references to external values +--INI-- +error_reporting = E_ALL & ~E_STRICT +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +function check(&$obj) { + var_dump($obj); + $ser = serialize($obj); + var_dump($ser); + + $uobj = unserialize($ser); + var_dump($uobj); + $uobj->a = "obj->a.changed"; + var_dump($uobj); + $uobj->b = "obj->b.changed"; + var_dump($uobj); + $uobj->c = "obj->c.changed"; + var_dump($uobj); +} + +echo "\n\n--- a refs external:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = &$ext; +$obj->b = 1; +$obj->c = 1; +check($obj); + +echo "\n\n--- b refs external:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = 1; +$obj->b = &$ext; +$obj->c = 1; +check($obj); + +echo "\n\n--- c refs external:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = 1; +$obj->b = 1; +$obj->c = &$ext; +check($obj); + +echo "\n\n--- a,b ref external:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = &$ext; +$obj->b = &$ext; +$obj->c = 1; +check($obj); + +echo "\n\n--- a,b,c ref external:\n"; +$ext = 1; +$obj = new stdClass; +$obj->a = &$ext; +$obj->b = &$ext; +$obj->c = &$ext; +check($obj); + +echo "Done"; +?> +--EXPECTF-- + +--- a refs external: +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + int(1) + ["c"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"b";i:1;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["a"]=> + int(1) + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- b refs external: +object(stdClass)#%d (3) { + ["a"]=> + int(1) + ["b"]=> + &int(1) + ["c"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"b";i:1;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["a"]=> + int(1) + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- c refs external: +object(stdClass)#%d (3) { + ["a"]=> + int(1) + ["b"]=> + int(1) + ["c"]=> + &int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"b";i:1;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["a"]=> + int(1) + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- a,b ref external: +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + &int(1) + ["c"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"b";R:2;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + &int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + &string(14) "obj->a.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- a,b,c ref external: +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + &int(1) + ["c"]=> + &int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"b";R:2;S:1:"c";R:2;}" +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + &int(1) + ["c"]=> + &int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + &string(14) "obj->a.changed" + ["c"]=> + &string(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + &string(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->c.changed" + ["b"]=> + &string(14) "obj->c.changed" + ["c"]=> + &string(14) "obj->c.changed" +} +Done +--UEXPECTF-- +--- a refs external: +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"b";i:1;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + int(1) + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- b refs external: +object(stdClass)#%d (3) { + [u"a"]=> + int(1) + [u"b"]=> + &int(1) + [u"c"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"b";i:1;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + int(1) + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- c refs external: +object(stdClass)#%d (3) { + [u"a"]=> + int(1) + [u"b"]=> + int(1) + [u"c"]=> + &int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"b";i:1;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + int(1) + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- a,b ref external: +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) + [u"c"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"b";R:2;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + &unicode(14) "obj->a.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- a,b,c ref external: +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) + [u"c"]=> + &int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"b";R:2;U:1:"c";R:2;}" +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) + [u"c"]=> + &int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + &unicode(14) "obj->a.changed" + [u"c"]=> + &unicode(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + &unicode(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->c.changed" + [u"b"]=> + &unicode(14) "obj->c.changed" + [u"c"]=> + &unicode(14) "obj->c.changed" +} +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_error_001.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_error_001.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_error_001.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_error_001.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,42 @@ +--TEST-- +Test serialize() & unserialize() functions: error conditions - wrong number of args. +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +echo "*** Testing serialize()/unserialize() : error conditions ***\n"; + +// Zero arguments +var_dump( serialize() ); +var_dump( unserialize() ); + +//Test serialize with one more than the expected number of arguments +var_dump( serialize(1,2) ); +var_dump( unserialize(1,2) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing serialize()/unserialize() : error conditions *** + +Warning: Wrong parameter count for serialize() in %s on line 16 +NULL + +Warning: unserialize() expects exactly 1 parameter, 0 given in %s on line 17 +bool(false) + +Warning: Wrong parameter count for serialize() in %s on line 20 +NULL + +Warning: unserialize() expects exactly 1 parameter, 2 given in %s on line 21 +bool(false) +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_arrays_003.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_arrays_003.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_arrays_003.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_arrays_003.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,516 @@ +--TEST-- +serialization: arrays with references to an external variable +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +function check(&$a) { + var_dump($a); + $ser = serialize($a); + var_dump($ser); + + $b = unserialize($ser); + var_dump($b); + $b[0] = "b0.changed"; + var_dump($b); + $b[1] = "b1.changed"; + var_dump($b); + $b[2] = "b2.changed"; + var_dump($b); +} + +echo "\n\n--- 0 refs external:\n"; +$ext = 1; +$a = array(); +$a[0] = &$ext; +$a[1] = 1; +$a[2] = 1; +check($a); + +echo "\n\n--- 1 refs external:\n"; +$ext = 1; +$a = array(); +$a[0] = 1; +$a[1] = &$ext; +$a[2] = 1; +check($a); + +echo "\n\n--- 2 refs external:\n"; +$ext = 1; +$a = array(); +$a[0] = 1; +$a[1] = 1; +$a[2] = &$ext; +check($a); + +echo "\n\n--- 1,2 ref external:\n"; +$ext = 1; +$a = array(); +$a[0] = &$ext; +$a[1] = &$ext; +$a[2] = 1; +check($a); + +echo "\n\n--- 1,2,3 ref external:\n"; +$ext = 1; +$a = array(); +$a[0] = &$ext; +$a[1] = &$ext; +$a[2] = &$ext; +check($a); + +echo "Done"; +?> +--EXPECTF-- + + +--- 0 refs external: +array(3) { + [0]=> + &int(1) + [1]=> + int(1) + [2]=> + int(1) +} +string(30) "a:3:{i:0;i:1;i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + string(10) "b2.changed" +} + + +--- 1 refs external: +array(3) { + [0]=> + int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +string(30) "a:3:{i:0;i:1;i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + string(10) "b2.changed" +} + + +--- 2 refs external: +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &int(1) +} +string(30) "a:3:{i:0;i:1;i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + string(10) "b2.changed" +} + + +--- 1,2 ref external: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +string(30) "a:3:{i:0;i:1;i:1;R:2;i:2;i:1;}" +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b0.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + string(10) "b2.changed" +} + + +--- 1,2,3 ref external: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +string(30) "a:3:{i:0;i:1;i:1;R:2;i:2;R:2;}" +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b0.changed" + [2]=> + &string(10) "b0.changed" +} +array(3) { + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + &string(10) "b1.changed" +} +array(3) { + [0]=> + &string(10) "b2.changed" + [1]=> + &string(10) "b2.changed" + [2]=> + &string(10) "b2.changed" +} +Done +--UEXPECTF-- + + +--- 0 refs external: +array(3) { + [0]=> + &int(1) + [1]=> + int(1) + [2]=> + int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + unicode(10) "b2.changed" +} + + +--- 1 refs external: +array(3) { + [0]=> + int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + unicode(10) "b2.changed" +} + + +--- 2 refs external: +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + unicode(10) "b2.changed" +} + + +--- 1,2 ref external: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;R:2;i:2;i:1;}" +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b0.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + unicode(10) "b2.changed" +} + + +--- 1,2,3 ref external: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +unicode(30) "a:3:{i:0;i:1;i:1;R:2;i:2;R:2;}" +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &int(1) +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b0.changed" + [2]=> + &unicode(10) "b0.changed" +} +array(3) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + &unicode(10) "b1.changed" +} +array(3) { + [0]=> + &unicode(10) "b2.changed" + [1]=> + &unicode(10) "b2.changed" + [2]=> + &unicode(10) "b2.changed" +} +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_resources_001.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_resources_001.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_resources_001.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_resources_001.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,36 @@ +--TEST-- +Test serialize() & unserialize() functions: resources +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +echo "\n--- Testing Resource ---\n"; +$file_handle = fopen( __FILE__, "r" ); +$serialized_data = serialize( $file_handle ); +fclose($file_handle); +var_dump($serialized_data); +var_dump(unserialize($serialized_data)); + +echo "\nDone"; +?> +--EXPECTF-- +--- Testing Resource --- +string(4) "i:%d;" +int(%d) + +Done +--UEXPECTF-- +--- Testing Resource --- +unicode(4) "i:%d;" +int(%d) + +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_arrays_005.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_arrays_005.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_arrays_005.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_arrays_005.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,1062 @@ +--TEST-- +serialization: arrays with references, nested +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +function check(&$a) { + var_dump($a); + $ser = serialize($a); + var_dump($ser); + + $b = unserialize($ser); + + // Change each element and dump result. + foreach($b as $k=>$v) { + if (is_array($v)){ + foreach($b[$k] as $sk=>$sv) { + $b[$k][$sk] = "b$k.$sk.changed"; + var_dump($b); + } + } else { + $b[$k] = "b$k.changed"; + var_dump($b); + } + } +} + +echo "\n\n--- Nested array references 1 element in containing array:\n"; +$a = array(); +$c = array(1,1,&$a); +$a[0] = &$c[0]; +$a[1] = 1; +check($c); + +echo "\n\n--- Nested array references 1 element in containing array (slightly different):\n"; +$a = array(); +$c = array(1,&$a,1); +$a[0] = 1; +$a[1] = &$c[0]; +check($c); + +echo "\n\n--- Nested array references 2 elements in containing array:\n"; +$a = array(); +$c = array(1,1,&$a); +$a[0] = &$c[0]; +$a[1] = &$c[1]; +check($c); + + +echo "\n\n--- Containing array references 1 element in nested array:\n"; +$a = array(); +$a[0] = 1; +$a[1] = 1; +$c = array(1,&$a[0],&$a); +check($c); + +echo "\n\n--- Containing array references 2 elements in nested array:\n"; +$a = array(); +$a[0] = 1; +$a[1] = 1; +$c = array(&$a[0],&$a[1],&$a); +check($c); + +echo "\n\n--- Nested array references container:\n"; +$a = array(); +$c = array(1,1,&$a); +$a[0] = 1; +$a[1] = &$c; +check($c); + +?> +--EXPECTF-- + + +--- Nested array references 1 element in containing array: +array(3) { + [0]=> + &int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + &int(1) + [1]=> + int(1) + } +} +string(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:2;i:1;i:1;}}" +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + int(1) + [2]=> + array(2) { + [0]=> + &string(10) "b0.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &string(10) "b0.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + string(12) "b2.1.changed" + } +} + + +--- Nested array references 1 element in containing array (slightly different): +array(3) { + [0]=> + &int(1) + [1]=> + &array(2) { + [0]=> + int(1) + [1]=> + &int(1) + } + [2]=> + int(1) +} +string(48) "a:3:{i:0;i:1;i:1;a:2:{i:0;i:1;i:1;R:2;}i:2;i:1;}" +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + array(2) { + [0]=> + int(1) + [1]=> + &string(10) "b0.changed" + } + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + array(2) { + [0]=> + string(12) "b1.0.changed" + [1]=> + &string(10) "b0.changed" + } + [2]=> + int(1) +} +array(3) { + [0]=> + &string(12) "b1.1.changed" + [1]=> + array(2) { + [0]=> + string(12) "b1.0.changed" + [1]=> + &string(12) "b1.1.changed" + } + [2]=> + int(1) +} +array(3) { + [0]=> + &string(12) "b1.1.changed" + [1]=> + array(2) { + [0]=> + string(12) "b1.0.changed" + [1]=> + &string(12) "b1.1.changed" + } + [2]=> + string(10) "b2.changed" +} + + +--- Nested array references 2 elements in containing array: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &array(2) { + [0]=> + &int(1) + [1]=> + &int(1) + } +} +string(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:2;i:1;R:3;}}" +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &int(1) + [2]=> + array(2) { + [0]=> + &string(10) "b0.changed" + [1]=> + &int(1) + } +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b1.changed" + } +} +array(3) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + &string(10) "b1.changed" + } +} +array(3) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + &string(12) "b2.1.changed" + [2]=> + array(2) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + &string(12) "b2.1.changed" + } +} + + +--- Containing array references 1 element in nested array: +array(3) { + [0]=> + int(1) + [1]=> + &int(1) + [2]=> + &array(2) { + [0]=> + &int(1) + [1]=> + int(1) + } +} +string(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:3;i:1;i:1;}}" +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + &int(1) + [2]=> + array(2) { + [0]=> + &int(1) + [1]=> + int(1) + } +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &string(10) "b1.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + &string(12) "b2.0.changed" + [2]=> + array(2) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + &string(12) "b2.0.changed" + [2]=> + array(2) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + string(12) "b2.1.changed" + } +} + + +--- Containing array references 2 elements in nested array: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &array(2) { + [0]=> + &int(1) + [1]=> + &int(1) + } +} +string(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:2;i:1;R:3;}}" +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &int(1) + [2]=> + array(2) { + [0]=> + &string(10) "b0.changed" + [1]=> + &int(1) + } +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b1.changed" + } +} +array(3) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + &string(10) "b1.changed" + } +} +array(3) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + &string(12) "b2.1.changed" + [2]=> + array(2) { + [0]=> + &string(12) "b2.0.changed" + [1]=> + &string(12) "b2.1.changed" + } +} + + +--- Nested array references container: +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + &array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + &array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + *RECURSION* + } + } + } + } +} +string(74) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;i:1;i:1;a:3:{i:0;i:1;i:1;i:1;i:2;R:4;}}}" +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + *RECURSION* + } + } + } + } +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + *RECURSION* + } + } + } + } +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + &array(2) { + [0]=> + string(12) "b2.0.changed" + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + string(12) "b2.0.changed" + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + *RECURSION* + } + } + } + } +} +array(3) { + [0]=> + string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + &array(2) { + [0]=> + string(12) "b2.0.changed" + [1]=> + string(12) "b2.1.changed" + } +} +--UEXPECTF-- + + +--- Nested array references 1 element in containing array: +array(3) { + [0]=> + &int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + &int(1) + [1]=> + int(1) + } +} +unicode(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:2;i:1;i:1;}}" +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + int(1) + [2]=> + array(2) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + unicode(12) "b2.1.changed" + } +} + + +--- Nested array references 1 element in containing array (slightly different): +array(3) { + [0]=> + &int(1) + [1]=> + &array(2) { + [0]=> + int(1) + [1]=> + &int(1) + } + [2]=> + int(1) +} +unicode(48) "a:3:{i:0;i:1;i:1;a:2:{i:0;i:1;i:1;R:2;}i:2;i:1;}" +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + array(2) { + [0]=> + int(1) + [1]=> + &unicode(10) "b0.changed" + } + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + array(2) { + [0]=> + unicode(12) "b1.0.changed" + [1]=> + &unicode(10) "b0.changed" + } + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(12) "b1.1.changed" + [1]=> + array(2) { + [0]=> + unicode(12) "b1.0.changed" + [1]=> + &unicode(12) "b1.1.changed" + } + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(12) "b1.1.changed" + [1]=> + array(2) { + [0]=> + unicode(12) "b1.0.changed" + [1]=> + &unicode(12) "b1.1.changed" + } + [2]=> + unicode(10) "b2.changed" +} + + +--- Nested array references 2 elements in containing array: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &array(2) { + [0]=> + &int(1) + [1]=> + &int(1) + } +} +unicode(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:2;i:1;R:3;}}" +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &int(1) + [2]=> + array(2) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &int(1) + } +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b1.changed" + } +} +array(3) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + &unicode(10) "b1.changed" + } +} +array(3) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + &unicode(12) "b2.1.changed" + [2]=> + array(2) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + &unicode(12) "b2.1.changed" + } +} + + +--- Containing array references 1 element in nested array: +array(3) { + [0]=> + int(1) + [1]=> + &int(1) + [2]=> + &array(2) { + [0]=> + &int(1) + [1]=> + int(1) + } +} +unicode(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:3;i:1;i:1;}}" +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + &int(1) + [2]=> + array(2) { + [0]=> + &int(1) + [1]=> + int(1) + } +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + &unicode(12) "b2.0.changed" + [2]=> + array(2) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + int(1) + } +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + &unicode(12) "b2.0.changed" + [2]=> + array(2) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + unicode(12) "b2.1.changed" + } +} + + +--- Containing array references 2 elements in nested array: +array(3) { + [0]=> + &int(1) + [1]=> + &int(1) + [2]=> + &array(2) { + [0]=> + &int(1) + [1]=> + &int(1) + } +} +unicode(48) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;R:2;i:1;R:3;}}" +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &int(1) + [2]=> + array(2) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &int(1) + } +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b1.changed" + } +} +array(3) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + array(2) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + &unicode(10) "b1.changed" + } +} +array(3) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + &unicode(12) "b2.1.changed" + [2]=> + array(2) { + [0]=> + &unicode(12) "b2.0.changed" + [1]=> + &unicode(12) "b2.1.changed" + } +} + + +--- Nested array references container: +array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + &array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + &array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + *RECURSION* + } + } + } + } +} +unicode(74) "a:3:{i:0;i:1;i:1;i:1;i:2;a:2:{i:0;i:1;i:1;a:3:{i:0;i:1;i:1;i:1;i:2;R:4;}}}" +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + *RECURSION* + } + } + } + } +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + int(1) + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + *RECURSION* + } + } + } + } +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + &array(2) { + [0]=> + unicode(12) "b2.0.changed" + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + &array(2) { + [0]=> + unicode(12) "b2.0.changed" + [1]=> + array(3) { + [0]=> + int(1) + [1]=> + int(1) + [2]=> + *RECURSION* + } + } + } + } +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + &array(2) { + [0]=> + unicode(12) "b2.0.changed" + [1]=> + unicode(12) "b2.1.changed" + } +} http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_001.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_001.phpt http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_precision_002.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_precision_002.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_precision_002.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_precision_002.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,23 @@ +--TEST-- +Test serialize_precision (part 2) +--INI-- +serialize_precision=75 +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +var_dump(serialize(0.1)); +?> +--EXPECTF-- +string(60) "d:0.1000000000000000055511151231257827021181583404541015625;" +--UEXPECTF-- +unicode(60) "d:0.1000000000000000055511151231257827021181583404541015625;" \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_010.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_010.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_010.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_010.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,37 @@ +--TEST-- +Serialize() must return a string or NULL +--SKIPIF-- +<?php if (!interface_exists('Serializable')) die('skip Interface Serialzable not defined'); ?> +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +Class C implements Serializable { + public function serialize() { + return $this; + } + + public function unserialize($blah) { + } +} + +try { + var_dump(serialize(new C)); +} catch (Exception $e) { + echo $e->getMessage(). "\n"; +} + +echo "Done"; +?> +--EXPECTF-- +C::serialize() must return a string or NULL +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_013.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_013.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_013.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_013.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,890 @@ +--TEST-- +Object serialization / unserialization: references amongst properties +--INI-- +error_reporting = E_ALL & ~E_STRICT +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +function check(&$obj) { + var_dump($obj); + $ser = serialize($obj); + var_dump($ser); + + $uobj = unserialize($ser); + var_dump($uobj); + $uobj->a = "obj->a.changed"; + var_dump($uobj); + $uobj->b = "obj->b.changed"; + var_dump($uobj); + $uobj->c = "obj->c.changed"; + var_dump($uobj); +} + +echo "\n\n--- a refs b:\n"; +$obj = new stdClass; +$obj->a = &$obj->b; +$obj->b = 1; +$obj->c = 1; +check($obj); + +echo "\n\n--- a refs c:\n"; +$obj = new stdClass; +$obj->a = &$obj->c; +$obj->b = 1; +$obj->c = 1; +check($obj); + +echo "\n\n--- b refs a:\n"; +$obj = new stdClass; +$obj->a = 1; +$obj->b = &$obj->a; +$obj->c = 1; +check($obj); + +echo "\n\n--- b refs c:\n"; +$obj = new stdClass; +$obj->a = 1; +$obj->b = &$obj->c; +$obj->c = 1; +check($obj); + +echo "\n\n--- c refs a:\n"; +$obj = new stdClass; +$obj->a = 1; +$obj->b = 1; +$obj->c = &$obj->a; +check($obj); + +echo "\n\n--- c refs b:\n"; +$obj = new stdClass; +$obj->a = 1; +$obj->b = 1; +$obj->c = &$obj->b; +check($obj); + +echo "\n\n--- a,b refs c:\n"; +$obj = new stdClass; +$obj->a = &$obj->c; +$obj->b = &$obj->c; +$obj->c = 1; +check($obj); + +echo "\n\n--- a,c refs b:\n"; +$obj = new stdClass; +$obj->a = &$obj->b; +$obj->b = 1; +$obj->c = &$obj->b; +check($obj); + +echo "\n\n--- b,c refs a:\n"; +$obj = new stdClass; +$obj->a = 1; +$obj->b = &$obj->a; +$obj->c = &$obj->a; +check($obj); + +echo "Done"; +?> +--EXPECTF-- + +--- a refs b: +object(stdClass)#%d (3) { + ["b"]=> + &int(1) + ["a"]=> + &int(1) + ["c"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"b";i:1;S:1:"a";R:2;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["b"]=> + &int(1) + ["a"]=> + &int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["b"]=> + &string(14) "obj->a.changed" + ["a"]=> + &string(14) "obj->a.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["b"]=> + &string(14) "obj->b.changed" + ["a"]=> + &string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["b"]=> + &string(14) "obj->b.changed" + ["a"]=> + &string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- a refs c: +object(stdClass)#%d (3) { + ["c"]=> + &int(1) + ["a"]=> + &int(1) + ["b"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"c";i:1;S:1:"a";R:2;S:1:"b";i:1;}" +object(stdClass)#%d (3) { + ["c"]=> + &int(1) + ["a"]=> + &int(1) + ["b"]=> + int(1) +} +object(stdClass)#%d (3) { + ["c"]=> + &string(14) "obj->a.changed" + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + int(1) +} +object(stdClass)#%d (3) { + ["c"]=> + &string(14) "obj->a.changed" + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + ["c"]=> + &string(14) "obj->c.changed" + ["a"]=> + &string(14) "obj->c.changed" + ["b"]=> + string(14) "obj->b.changed" +} + + +--- b refs a: +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + &int(1) + ["c"]=> + int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"b";R:2;S:1:"c";i:1;}" +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + &int(1) + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + &string(14) "obj->a.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + string(14) "obj->c.changed" +} + + +--- b refs c: +object(stdClass)#%d (3) { + ["a"]=> + int(1) + ["c"]=> + &int(1) + ["b"]=> + &int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"c";i:1;S:1:"b";R:3;}" +object(stdClass)#%d (3) { + ["a"]=> + int(1) + ["c"]=> + &int(1) + ["b"]=> + &int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["c"]=> + &int(1) + ["b"]=> + &int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["c"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["c"]=> + &string(14) "obj->c.changed" + ["b"]=> + &string(14) "obj->c.changed" +} + + +--- c refs a: +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + int(1) + ["c"]=> + &int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"b";i:1;S:1:"c";R:2;}" +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + int(1) + ["c"]=> + &int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + int(1) + ["c"]=> + &string(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + &string(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->c.changed" + ["b"]=> + string(14) "obj->b.changed" + ["c"]=> + &string(14) "obj->c.changed" +} + + +--- c refs b: +object(stdClass)#%d (3) { + ["a"]=> + int(1) + ["b"]=> + &int(1) + ["c"]=> + &int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"b";i:1;S:1:"c";R:3;}" +object(stdClass)#%d (3) { + ["a"]=> + int(1) + ["b"]=> + &int(1) + ["c"]=> + &int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + &int(1) + ["c"]=> + &int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + &string(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + string(14) "obj->a.changed" + ["b"]=> + &string(14) "obj->c.changed" + ["c"]=> + &string(14) "obj->c.changed" +} + + +--- a,b refs c: +object(stdClass)#%d (3) { + ["c"]=> + &int(1) + ["a"]=> + &int(1) + ["b"]=> + &int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"c";i:1;S:1:"a";R:2;S:1:"b";R:2;}" +object(stdClass)#%d (3) { + ["c"]=> + &int(1) + ["a"]=> + &int(1) + ["b"]=> + &int(1) +} +object(stdClass)#%d (3) { + ["c"]=> + &string(14) "obj->a.changed" + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + &string(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + ["c"]=> + &string(14) "obj->b.changed" + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + ["c"]=> + &string(14) "obj->c.changed" + ["a"]=> + &string(14) "obj->c.changed" + ["b"]=> + &string(14) "obj->c.changed" +} + + +--- a,c refs b: +object(stdClass)#%d (3) { + ["b"]=> + &int(1) + ["a"]=> + &int(1) + ["c"]=> + &int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"b";i:1;S:1:"a";R:2;S:1:"c";R:2;}" +object(stdClass)#%d (3) { + ["b"]=> + &int(1) + ["a"]=> + &int(1) + ["c"]=> + &int(1) +} +object(stdClass)#%d (3) { + ["b"]=> + &string(14) "obj->a.changed" + ["a"]=> + &string(14) "obj->a.changed" + ["c"]=> + &string(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + ["b"]=> + &string(14) "obj->b.changed" + ["a"]=> + &string(14) "obj->b.changed" + ["c"]=> + &string(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + ["b"]=> + &string(14) "obj->c.changed" + ["a"]=> + &string(14) "obj->c.changed" + ["c"]=> + &string(14) "obj->c.changed" +} + + +--- b,c refs a: +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + &int(1) + ["c"]=> + &int(1) +} +string(55) "O:8:"stdClass":3:{S:1:"a";i:1;S:1:"b";R:2;S:1:"c";R:2;}" +object(stdClass)#%d (3) { + ["a"]=> + &int(1) + ["b"]=> + &int(1) + ["c"]=> + &int(1) +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->a.changed" + ["b"]=> + &string(14) "obj->a.changed" + ["c"]=> + &string(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->b.changed" + ["b"]=> + &string(14) "obj->b.changed" + ["c"]=> + &string(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + ["a"]=> + &string(14) "obj->c.changed" + ["b"]=> + &string(14) "obj->c.changed" + ["c"]=> + &string(14) "obj->c.changed" +} +Done +--UEXPECTF-- +--- a refs b: +object(stdClass)#%d (3) { + [u"b"]=> + &int(1) + [u"a"]=> + &int(1) + [u"c"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"b";i:1;U:1:"a";R:2;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"b"]=> + &int(1) + [u"a"]=> + &int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"b"]=> + &unicode(14) "obj->a.changed" + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- a refs c: +object(stdClass)#%d (3) { + [u"c"]=> + &int(1) + [u"a"]=> + &int(1) + [u"b"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"c";i:1;U:1:"a";R:2;U:1:"b";i:1;}" +object(stdClass)#%d (3) { + [u"c"]=> + &int(1) + [u"a"]=> + &int(1) + [u"b"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"c"]=> + &unicode(14) "obj->a.changed" + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"c"]=> + &unicode(14) "obj->a.changed" + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + [u"c"]=> + &unicode(14) "obj->c.changed" + [u"a"]=> + &unicode(14) "obj->c.changed" + [u"b"]=> + unicode(14) "obj->b.changed" +} + + +--- b refs a: +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) + [u"c"]=> + int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"b";R:2;U:1:"c";i:1;}" +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + &unicode(14) "obj->a.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + unicode(14) "obj->c.changed" +} + + +--- b refs c: +object(stdClass)#%d (3) { + [u"a"]=> + int(1) + [u"c"]=> + &int(1) + [u"b"]=> + &int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"c";i:1;U:1:"b";R:3;}" +object(stdClass)#%d (3) { + [u"a"]=> + int(1) + [u"c"]=> + &int(1) + [u"b"]=> + &int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"c"]=> + &int(1) + [u"b"]=> + &int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"c"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"c"]=> + &unicode(14) "obj->c.changed" + [u"b"]=> + &unicode(14) "obj->c.changed" +} + + +--- c refs a: +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + int(1) + [u"c"]=> + &int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"b";i:1;U:1:"c";R:2;}" +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + int(1) + [u"c"]=> + &int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + int(1) + [u"c"]=> + &unicode(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + &unicode(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->c.changed" + [u"b"]=> + unicode(14) "obj->b.changed" + [u"c"]=> + &unicode(14) "obj->c.changed" +} + + +--- c refs b: +object(stdClass)#%d (3) { + [u"a"]=> + int(1) + [u"b"]=> + &int(1) + [u"c"]=> + &int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"b";i:1;U:1:"c";R:3;}" +object(stdClass)#%d (3) { + [u"a"]=> + int(1) + [u"b"]=> + &int(1) + [u"c"]=> + &int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + &int(1) + [u"c"]=> + &int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + &unicode(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + unicode(14) "obj->a.changed" + [u"b"]=> + &unicode(14) "obj->c.changed" + [u"c"]=> + &unicode(14) "obj->c.changed" +} + + +--- a,b refs c: +object(stdClass)#%d (3) { + [u"c"]=> + &int(1) + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"c";i:1;U:1:"a";R:2;U:1:"b";R:2;}" +object(stdClass)#%d (3) { + [u"c"]=> + &int(1) + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) +} +object(stdClass)#%d (3) { + [u"c"]=> + &unicode(14) "obj->a.changed" + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + &unicode(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + [u"c"]=> + &unicode(14) "obj->b.changed" + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + [u"c"]=> + &unicode(14) "obj->c.changed" + [u"a"]=> + &unicode(14) "obj->c.changed" + [u"b"]=> + &unicode(14) "obj->c.changed" +} + + +--- a,c refs b: +object(stdClass)#%d (3) { + [u"b"]=> + &int(1) + [u"a"]=> + &int(1) + [u"c"]=> + &int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"b";i:1;U:1:"a";R:2;U:1:"c";R:2;}" +object(stdClass)#%d (3) { + [u"b"]=> + &int(1) + [u"a"]=> + &int(1) + [u"c"]=> + &int(1) +} +object(stdClass)#%d (3) { + [u"b"]=> + &unicode(14) "obj->a.changed" + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"c"]=> + &unicode(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + &unicode(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + [u"b"]=> + &unicode(14) "obj->c.changed" + [u"a"]=> + &unicode(14) "obj->c.changed" + [u"c"]=> + &unicode(14) "obj->c.changed" +} + + +--- b,c refs a: +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) + [u"c"]=> + &int(1) +} +unicode(55) "O:8:"stdClass":3:{U:1:"a";i:1;U:1:"b";R:2;U:1:"c";R:2;}" +object(stdClass)#%d (3) { + [u"a"]=> + &int(1) + [u"b"]=> + &int(1) + [u"c"]=> + &int(1) +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->a.changed" + [u"b"]=> + &unicode(14) "obj->a.changed" + [u"c"]=> + &unicode(14) "obj->a.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->b.changed" + [u"b"]=> + &unicode(14) "obj->b.changed" + [u"c"]=> + &unicode(14) "obj->b.changed" +} +object(stdClass)#%d (3) { + [u"a"]=> + &unicode(14) "obj->c.changed" + [u"b"]=> + &unicode(14) "obj->c.changed" + [u"c"]=> + &unicode(14) "obj->c.changed" +} +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_arrays_004.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_arrays_004.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_arrays_004.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_arrays_004.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,881 @@ +--TEST-- +serialization: arrays with references to the containing array +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +function check(&$a) { + var_dump($a); + $ser = serialize($a); + var_dump($ser); + + $b = unserialize($ser); + var_dump($b); + $b[0] = "b0.changed"; + var_dump($b); + $b[1] = "b1.changed"; + var_dump($b); + $b[2] = "b2.changed"; + var_dump($b); +} + +echo "\n\n--- 1 refs container:\n"; +$a = array(); +$a[0] = &$a; +$a[1] = 1; +$a[2] = 1; +check($a); + +echo "\n\n--- 1,2 ref container:\n"; +$a = array(); +$a[0] = &$a; +$a[1] = &$a; +$a[2] = 1; +check($a); + +echo "\n\n--- 1,2,3 ref container:\n"; +$a = array(); +$a[0] = &$a; +$a[1] = &$a; +$a[2] = &$a; +check($a); + +echo "Done"; +?> +--EXPECTF-- + + +--- 1 refs container: +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + int(1) + [2]=> + int(1) + } + [1]=> + int(1) + [2]=> + int(1) + } + [1]=> + int(1) + [2]=> + int(1) +} +string(56) "a:3:{i:0;a:3:{i:0;R:2;i:1;i:1;i:2;i:1;}i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + int(1) + [2]=> + int(1) + } + [1]=> + int(1) + [2]=> + int(1) + } + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + %string(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + %string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + %string(10) "b0.changed" + [1]=> + string(10) "b1.changed" + [2]=> + string(10) "b2.changed" +} + + +--- 1,2 ref container: +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [2]=> + int(1) + } + [2]=> + int(1) +} +string(56) "a:3:{i:0;a:3:{i:0;R:2;i:1;R:2;i:2;i:1;}i:1;R:2;i:2;i:1;}" +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [2]=> + int(1) + } + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b0.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + string(10) "b2.changed" +} + + +--- 1,2,3 ref container: +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } + [1]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } + [2]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } +} +string(56) "a:3:{i:0;a:3:{i:0;R:2;i:1;R:2;i:2;R:2;}i:1;R:2;i:2;R:2;}" +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } + [1]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } + [2]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } +} +array(3) { + [0]=> + &string(10) "b0.changed" + [1]=> + &string(10) "b0.changed" + [2]=> + &string(10) "b0.changed" +} +array(3) { + [0]=> + &string(10) "b1.changed" + [1]=> + &string(10) "b1.changed" + [2]=> + &string(10) "b1.changed" +} +array(3) { + [0]=> + &string(10) "b2.changed" + [1]=> + &string(10) "b2.changed" + [2]=> + &string(10) "b2.changed" +} +Done +--UEXPECTF-- + + +--- 1 refs container: +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + int(1) + [2]=> + int(1) + } + [1]=> + int(1) + [2]=> + int(1) + } + [1]=> + int(1) + [2]=> + int(1) +} +unicode(56) "a:3:{i:0;a:3:{i:0;R:2;i:1;i:1;i:2;i:1;}i:1;i:1;i:2;i:1;}" +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + int(1) + [2]=> + int(1) + } + [1]=> + int(1) + [2]=> + int(1) + } + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + int(1) + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + unicode(10) "b0.changed" + [1]=> + unicode(10) "b1.changed" + [2]=> + unicode(10) "b2.changed" +} + + +--- 1,2 ref container: +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [2]=> + int(1) + } + [2]=> + int(1) +} +unicode(56) "a:3:{i:0;a:3:{i:0;R:2;i:1;R:2;i:2;i:1;}i:1;R:2;i:2;i:1;}" +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + int(1) + } + [2]=> + int(1) + } + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b0.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + int(1) +} +array(3) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + unicode(10) "b2.changed" +} + + +--- 1,2,3 ref container: +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } + [1]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } + [2]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } +} +unicode(56) "a:3:{i:0;a:3:{i:0;R:2;i:1;R:2;i:2;R:2;}i:1;R:2;i:2;R:2;}" +array(3) { + [0]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } + [1]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } + [2]=> + &array(3) { + [0]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [1]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + [2]=> + &array(3) { + [0]=> + *RECURSION* + [1]=> + *RECURSION* + [2]=> + *RECURSION* + } + } +} +array(3) { + [0]=> + &unicode(10) "b0.changed" + [1]=> + &unicode(10) "b0.changed" + [2]=> + &unicode(10) "b0.changed" +} +array(3) { + [0]=> + &unicode(10) "b1.changed" + [1]=> + &unicode(10) "b1.changed" + [2]=> + &unicode(10) "b1.changed" +} +array(3) { + [0]=> + &unicode(10) "b2.changed" + [1]=> + &unicode(10) "b2.changed" + [2]=> + &unicode(10) "b2.changed" +} +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_012.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_012.phpt diff -u /dev/null php-src/ext/standard/tests/serialize/serialization_objects_012.phpt:1.2 --- /dev/null Tue Mar 18 15:12:42 2008 +++ php-src/ext/standard/tests/serialize/serialization_objects_012.phpt Tue Mar 18 15:12:42 2008 @@ -0,0 +1,402 @@ +--TEST-- +Object serialization / unserialization: real references and COW references +--FILE-- +<?php +/* Prototype : proto string serialize(mixed variable) + * Description: Returns a string representation of variable (which can later be unserialized) + * Source code: ext/standard/var.c + * Alias to functions: + */ +/* Prototype : proto mixed unserialize(string variable_representation) + * Description: Takes a string representation of variable and recreates it + * Source code: ext/standard/var.c + * Alias to functions: + */ + +echo "\n\nArray containing same object twice:\n"; +$obj = new stdclass; +$a[0] = $obj; +$a[1] = $a[0]; +var_dump($a); + +$ser = serialize($a); +var_dump($ser); + +$ua = unserialize($ser); +var_dump($ua); +$ua[0]->a = "newProp"; +var_dump($ua); +$ua[0] = "a0.changed"; +var_dump($ua); + + +echo "\n\nArray containing object and reference to that object:\n"; +$obj = new stdclass; +$a[0] = $obj; +$a[1] = &$a[0]; +var_dump($a); + +$ser = serialize($a); +var_dump($ser); + +$ua = unserialize($ser); +var_dump($ua); +$ua[0]->a = "newProp"; +var_dump($ua); +$ua[0] = "a0.changed"; +var_dump($ua); + +echo "\n\nObject containing same object twice:"; +$obj = new stdclass; +$contaner = new stdclass; +$contaner->a = $obj; +$contaner->b = $contaner->a; +var_dump($contaner); + +$ser = serialize($contaner); +var_dump($ser); + +$ucontainer = unserialize($ser); +var_dump($ucontainer); +$ucontainer->a->a = "newProp"; +var_dump($ucontainer); +$ucontainer->a = "container->a.changed"; +var_dump($ucontainer); + + +echo "\n\nObject containing object and reference to that object:\n"; +$obj = new stdclass; +$contaner = new stdclass; +$contaner->a = $obj; +$contaner->b = &$contaner->a; +var_dump($contaner); + +$ser = serialize($contaner); +var_dump($ser); + +$ucontainer = unserialize($ser); +var_dump($ucontainer); +$ucontainer->a->a = "newProp"; +var_dump($ucontainer); +$ucontainer->b = "container->a.changed"; +var_dump($ucontainer); + +echo "Done"; +?> +--EXPECTF-- + + +Array containing same object twice: +array(2) { + [0]=> + object(stdClass)#%d (0) { + } + [1]=> + object(stdClass)#%d (0) { + } +} +string(37) "a:2:{i:0;O:8:"stdClass":0:{}i:1;r:2;}" +array(2) { + [0]=> + object(stdClass)#%d (0) { + } + [1]=> + object(stdClass)#%d (0) { + } +} +array(2) { + [0]=> + object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } + [1]=> + object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } +} +array(2) { + [0]=> + string(10) "a0.changed" + [1]=> + object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } +} + + +Array containing object and reference to that object: +array(2) { + [0]=> + &object(stdClass)#%d (0) { + } + [1]=> + &object(stdClass)#%d (0) { + } +} +string(37) "a:2:{i:0;O:8:"stdClass":0:{}i:1;R:2;}" +array(2) { + [0]=> + &object(stdClass)#%d (0) { + } + [1]=> + &object(stdClass)#%d (0) { + } +} +array(2) { + [0]=> + &object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } + [1]=> + &object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } +} +array(2) { + [0]=> + &string(10) "a0.changed" + [1]=> + &string(10) "a0.changed" +} + + +Object containing same object twice:object(stdClass)#%d (2) { + ["a"]=> + object(stdClass)#%d (0) { + } + ["b"]=> + object(stdClass)#%d (0) { + } +} +string(58) "O:8:"stdClass":2:{S:1:"a";O:8:"stdClass":0:{}S:1:"b";r:2;}" +object(stdClass)#%d (2) { + ["a"]=> + object(stdClass)#%d (0) { + } + ["b"]=> + object(stdClass)#%d (0) { + } +} +object(stdClass)#%d (2) { + ["a"]=> + object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } + ["b"]=> + object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } +} +object(stdClass)#%d (2) { + ["a"]=> + string(20) "container->a.changed" + ["b"]=> + object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } +} + + +Object containing object and reference to that object: +object(stdClass)#%d (2) { + ["a"]=> + &object(stdClass)#%d (0) { + } + ["b"]=> + &object(stdClass)#%d (0) { + } +} +string(58) "O:8:"stdClass":2:{S:1:"a";O:8:"stdClass":0:{}S:1:"b";R:2;}" +object(stdClass)#%d (2) { + ["a"]=> + &object(stdClass)#%d (0) { + } + ["b"]=> + &object(stdClass)#%d (0) { + } +} +object(stdClass)#%d (2) { + ["a"]=> + &object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } + ["b"]=> + &object(stdClass)#%d (1) { + ["a"]=> + string(7) "newProp" + } +} +object(stdClass)#%d (2) { + ["a"]=> + &string(20) "container->a.changed" + ["b"]=> + &string(20) "container->a.changed" +} +Done +--UEXPECTF-- + +Array containing same object twice: +array(2) { + [0]=> + object(stdClass)#%d (0) { + } + [1]=> + object(stdClass)#%d (0) { + } +} +unicode(37) "a:2:{i:0;O:8:"stdClass":0:{}i:1;r:2;}" +array(2) { + [0]=> + object(stdClass)#%d (0) { + } + [1]=> + object(stdClass)#%d (0) { + } +} +array(2) { + [0]=> + object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } + [1]=> + object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } +} +array(2) { + [0]=> + unicode(10) "a0.changed" + [1]=> + object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } +} + + +Array containing object and reference to that object: +array(2) { + [0]=> + &object(stdClass)#%d (0) { + } + [1]=> + &object(stdClass)#%d (0) { + } +} +unicode(37) "a:2:{i:0;O:8:"stdClass":0:{}i:1;R:2;}" +array(2) { + [0]=> + &object(stdClass)#%d (0) { + } + [1]=> + &object(stdClass)#%d (0) { + } +} +array(2) { + [0]=> + &object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } + [1]=> + &object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } +} +array(2) { + [0]=> + &unicode(10) "a0.changed" + [1]=> + &unicode(10) "a0.changed" +} + + +Object containing same object twice:object(stdClass)#%d (2) { + [u"a"]=> + object(stdClass)#%d (0) { + } + [u"b"]=> + object(stdClass)#%d (0) { + } +} +unicode(58) "O:8:"stdClass":2:{U:1:"a";O:8:"stdClass":0:{}U:1:"b";r:2;}" +object(stdClass)#%d (2) { + [u"a"]=> + object(stdClass)#%d (0) { + } + [u"b"]=> + object(stdClass)#%d (0) { + } +} +object(stdClass)#%d (2) { + [u"a"]=> + object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } + [u"b"]=> + object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } +} +object(stdClass)#%d (2) { + [u"a"]=> + unicode(20) "container->a.changed" + [u"b"]=> + object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } +} + + +Object containing object and reference to that object: +object(stdClass)#%d (2) { + [u"a"]=> + &object(stdClass)#%d (0) { + } + [u"b"]=> + &object(stdClass)#%d (0) { + } +} +unicode(58) "O:8:"stdClass":2:{U:1:"a";O:8:"stdClass":0:{}U:1:"b";R:2;}" +object(stdClass)#%d (2) { + [u"a"]=> + &object(stdClass)#%d (0) { + } + [u"b"]=> + &object(stdClass)#%d (0) { + } +} +object(stdClass)#%d (2) { + [u"a"]=> + &object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } + [u"b"]=> + &object(stdClass)#%d (1) { + [u"a"]=> + unicode(7) "newProp" + } +} +object(stdClass)#%d (2) { + [u"a"]=> + &unicode(20) "container->a.changed" + [u"b"]=> + &unicode(20) "container->a.changed" +} +Done \ No newline at end of file http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/serialization_objects_002.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/serialize/serialization_objects_002.phpt http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/serialize/005.phpt?r1=1.5&r2=1.6&diff_format=u Index: php-src/ext/standard/tests/serialize/005.phpt diff -u php-src/ext/standard/tests/serialize/005.phpt:1.5 php-src/ext/standard/tests/serialize/005.phpt:1.6 --- php-src/ext/standard/tests/serialize/005.phpt:1.5 Fri Dec 22 00:47:27 2006 +++ php-src/ext/standard/tests/serialize/005.phpt Tue Mar 18 15:12:42 2008 @@ -179,7 +179,7 @@ do_autoload(autoload_not_available) Warning: unserialize(): Function unserializer() hasn't defined the class it was called for in %s005.php on line %d -object(__PHP_Incomplete_Class)#1 (1) { +object(__PHP_Incomplete_Class)#%d (1) { ["__PHP_Incomplete_Class_Name"]=> string(22) "autoload_not_available" } @@ -231,7 +231,7 @@ do_autoload(autoload_not_available) Warning: unserialize(): Function unserializer() hasn't defined the class it was called for in %s005.php on line %d -object(__PHP_Incomplete_Class)#1 (1) { +object(__PHP_Incomplete_Class)#%d (1) { [u"__PHP_Incomplete_Class_Name"]=> unicode(22) "autoload_not_available" }
« previous php.cvs (#49184) next »