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