1--TEST-- 2SPL: SplObjectStorage serialization & visibility 3--FILE-- 4<?php 5 6class TestClass 7{ 8 public $def = 24; 9 public $pub = 25; 10 protected $pro = 26; 11 private $pri = 27; 12 13 public function __construct($pub = 42, $pro = 43, $pri = 44) 14 { 15 $this->pub = $pub; 16 $this->pro = $pro; 17 $this->pri = $pri; 18 } 19} 20 21class ExtTestClass 22{ 23} 24 25class MyStorage extends SplObjectStorage 26{ 27 public $def = 24; 28 public $pub = 25; 29 protected $pro = 26; 30 private $pri = 27; 31 32 public function __construct($pub = 52, $pro = 53, $pri = 54) 33 { 34 $this->pub = $pub; 35 $this->pro = $pro; 36 $this->pri = $pri; 37 } 38} 39 40class ExtStorage extends MyStorage 41{ 42} 43 44$storage = new MyStorage(1,2,3); 45 46foreach(array(array(4,5,6),array(7,8,9)) as $value) 47{ 48 $storage->attach(new TestClass($value[0], $value[1], $value[2])); 49} 50 51var_dump(count($storage)); 52 53foreach($storage as $object) 54{ 55 var_dump($object); 56} 57 58var_dump($storage); 59 60var_dump(serialize($storage)); 61echo "===UNSERIALIZE===\n"; 62 63$storage2 = unserialize(serialize($storage)); 64 65var_dump(count($storage2)); 66 67foreach($storage2 as $object) 68{ 69 var_dump($object); 70} 71 72var_dump($storage2); 73 74?> 75===DONE=== 76<?php exit(0); ?> 77--EXPECTF-- 78int(2) 79object(TestClass)#%d (4) { 80 ["def"]=> 81 int(24) 82 ["pub"]=> 83 int(4) 84 ["pro":protected]=> 85 int(5) 86 ["pri":"TestClass":private]=> 87 int(6) 88} 89object(TestClass)#%d (4) { 90 ["def"]=> 91 int(24) 92 ["pub"]=> 93 int(7) 94 ["pro":protected]=> 95 int(8) 96 ["pri":"TestClass":private]=> 97 int(9) 98} 99object(MyStorage)#%d (5) { 100 ["def"]=> 101 int(24) 102 ["pub"]=> 103 int(1) 104 ["pro":protected]=> 105 int(2) 106 ["pri":"MyStorage":private]=> 107 int(3) 108 ["storage":"SplObjectStorage":private]=> 109 array(2) { 110 ["%s"]=> 111 array(2) { 112 ["obj"]=> 113 object(TestClass)#%d (4) { 114 ["def"]=> 115 int(24) 116 ["pub"]=> 117 int(4) 118 ["pro":protected]=> 119 int(5) 120 ["pri":"TestClass":private]=> 121 int(6) 122 } 123 ["inf"]=> 124 NULL 125 } 126 ["%s"]=> 127 array(2) { 128 ["obj"]=> 129 object(TestClass)#%d (4) { 130 ["def"]=> 131 int(24) 132 ["pub"]=> 133 int(7) 134 ["pro":protected]=> 135 int(8) 136 ["pri":"TestClass":private]=> 137 int(9) 138 } 139 ["inf"]=> 140 NULL 141 } 142 } 143} 144string(%d) "%s" 145===UNSERIALIZE=== 146int(2) 147object(TestClass)#%d (4) { 148 ["def"]=> 149 int(24) 150 ["pub"]=> 151 int(4) 152 ["pro":protected]=> 153 int(5) 154 ["pri":"TestClass":private]=> 155 int(6) 156} 157object(TestClass)#%d (4) { 158 ["def"]=> 159 int(24) 160 ["pub"]=> 161 int(7) 162 ["pro":protected]=> 163 int(8) 164 ["pri":"TestClass":private]=> 165 int(9) 166} 167object(MyStorage)#%d (5) { 168 ["def"]=> 169 int(24) 170 ["pub"]=> 171 int(1) 172 ["pro":protected]=> 173 int(2) 174 ["pri":"MyStorage":private]=> 175 int(3) 176 ["storage":"SplObjectStorage":private]=> 177 array(2) { 178 ["%s"]=> 179 array(2) { 180 ["obj"]=> 181 object(TestClass)#%d (4) { 182 ["def"]=> 183 int(24) 184 ["pub"]=> 185 int(4) 186 ["pro":protected]=> 187 int(5) 188 ["pri":"TestClass":private]=> 189 int(6) 190 } 191 ["inf"]=> 192 NULL 193 } 194 ["%s"]=> 195 array(2) { 196 ["obj"]=> 197 object(TestClass)#%d (4) { 198 ["def"]=> 199 int(24) 200 ["pub"]=> 201 int(7) 202 ["pro":protected]=> 203 int(8) 204 ["pri":"TestClass":private]=> 205 int(9) 206 } 207 ["inf"]=> 208 NULL 209 } 210 } 211} 212===DONE=== 213