bug45826.phpt 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. --TEST--
  2. ArrayObject/ArrayIterator : serialization
  3. --FILE--
  4. <?php
  5. $o = new ArrayObject();
  6. $y = new StdClass;
  7. $o->append($y);
  8. $o->append($y);
  9. $o->append($o);
  10. var_dump($o[0] === $o[1]);
  11. var_dump($o[2] === $o);
  12. $s1 = serialize($o);
  13. $s2 = $o->serialize();
  14. var_dump($s1);
  15. var_dump($s2);
  16. $o1 = unserialize($s1);
  17. var_dump($o1[0] === $o1[1]);
  18. var_dump($o1[2] === $o1);
  19. $o2 = new ArrayObject();
  20. $o2->unserialize($s2);
  21. var_dump($o2[0] === $o2[1]);
  22. var_dump($o2[2] !== $o2);
  23. var_dump($o2[2][2] === $o2[2]);
  24. echo "#### Extending ArrayObject\n";
  25. unset($o,$x,$s1,$s2,$o1,$o2);
  26. class ArrayObject2 extends ArrayObject {
  27. public function __serialize(): array {
  28. return parent::__serialize();
  29. }
  30. public function __unserialize($s): void {
  31. parent::__unserialize($s);
  32. }
  33. }
  34. $o = new ArrayObject2();
  35. $y = new StdClass;
  36. $o->append($y);
  37. $o->append($y);
  38. $o->append($o);
  39. var_dump($o[0] === $o[1]);
  40. var_dump($o[2] === $o);
  41. $s1 = serialize($o);
  42. $s2 = $o->__serialize();
  43. var_dump($s1);
  44. var_dump($s2);
  45. $o1 = unserialize($s1);
  46. var_dump($o1[0] === $o1[1]);
  47. var_dump($o1[2] === $o1);
  48. $o2 = new ArrayObject2();
  49. $o2->__unserialize($s2);
  50. var_dump($o2[0] === $o2[1]);
  51. var_dump($o2[2] !== $o2);
  52. var_dump($o2[2][2] === $o2[2]);
  53. ?>
  54. --EXPECT--
  55. bool(true)
  56. bool(true)
  57. string(96) "O:11:"ArrayObject":4:{i:0;i:0;i:1;a:3:{i:0;O:8:"stdClass":0:{}i:1;r:4;i:2;r:1;}i:2;a:0:{}i:3;N;}"
  58. string(137) "x:i:0;a:3:{i:0;O:8:"stdClass":0:{}i:1;r:3;i:2;O:11:"ArrayObject":4:{i:0;i:0;i:1;a:3:{i:0;r:3;i:1;r:3;i:2;r:5;}i:2;a:0:{}i:3;N;}};m:a:0:{}"
  59. bool(true)
  60. bool(true)
  61. bool(true)
  62. bool(true)
  63. bool(true)
  64. #### Extending ArrayObject
  65. bool(true)
  66. bool(true)
  67. string(97) "O:12:"ArrayObject2":4:{i:0;i:0;i:1;a:3:{i:0;O:8:"stdClass":0:{}i:1;r:4;i:2;r:1;}i:2;a:0:{}i:3;N;}"
  68. array(4) {
  69. [0]=>
  70. int(0)
  71. [1]=>
  72. array(3) {
  73. [0]=>
  74. object(stdClass)#8 (0) {
  75. }
  76. [1]=>
  77. object(stdClass)#8 (0) {
  78. }
  79. [2]=>
  80. object(ArrayObject2)#5 (1) {
  81. ["storage":"ArrayObject":private]=>
  82. *RECURSION*
  83. }
  84. }
  85. [2]=>
  86. array(0) {
  87. }
  88. [3]=>
  89. NULL
  90. }
  91. bool(true)
  92. bool(true)
  93. bool(true)
  94. bool(true)
  95. bool(true)