1--TEST-- 2SPL: SplObjectStorage with accociatied information 3--FILE-- 4<?php 5 6class TestClass 7{ 8 public $test = 25; 9 10 public function __construct($test = 42) 11 { 12 $this->test = $test; 13 } 14} 15 16class MyStorage extends SplObjectStorage 17{ 18 public $bla = 25; 19 20 public function __construct($bla = 26) 21 { 22 $this->bla = $bla; 23 } 24} 25 26$storage = new MyStorage(); 27 28foreach(array(1=>"foo",2=>42) as $key => $value) 29{ 30 $storage->attach(new TestClass($key), $value); 31} 32 33var_dump(count($storage)); 34 35foreach($storage as $object) 36{ 37 var_dump($object->test); 38} 39 40var_dump($storage); 41 42var_dump(serialize($storage)); 43echo "===UNSERIALIZE===\n"; 44 45$storage2 = unserialize(serialize($storage)); 46 47var_dump(count($storage2)); 48 49foreach($storage2 as $object) 50{ 51 var_dump($object->test); 52} 53 54var_dump($storage2); 55$storage->attach(new TestClass(3), new stdClass); 56$storage->attach(new TestClass(4), new TestClass(5)); 57echo "===UNSERIALIZE2===\n"; 58var_dump(unserialize(serialize($storage))); 59$storage->rewind(); 60$storage->next(); 61var_dump($storage->key()); 62var_dump($storage->current()); 63var_dump($storage->getInfo()); 64$storage->setInfo("bar"); 65var_dump($storage->getInfo()); 66echo "===UNSERIALIZE3===\n"; 67var_dump(unserialize(serialize($storage))); 68$storage->rewind(); 69$storage->next(); 70$storage->next(); 71var_dump($storage->key()); 72var_dump($storage->current()); 73$storage->attach($storage->current(), "replaced"); 74echo "===UNSERIALIZE4===\n"; 75var_dump(unserialize(serialize($storage))); 76 77?> 78--EXPECTF-- 79int(2) 80int(1) 81int(2) 82object(MyStorage)#%d (2) { 83 ["bla"]=> 84 int(26) 85 ["storage":"SplObjectStorage":private]=> 86 array(2) { 87 ["%s"]=> 88 array(2) { 89 ["obj"]=> 90 object(TestClass)#%d (1) { 91 ["test"]=> 92 int(1) 93 } 94 ["inf"]=> 95 string(3) "foo" 96 } 97 ["%s"]=> 98 array(2) { 99 ["obj"]=> 100 object(TestClass)#%d (1) { 101 ["test"]=> 102 int(2) 103 } 104 ["inf"]=> 105 int(42) 106 } 107 } 108} 109string(%d) "%s" 110===UNSERIALIZE=== 111int(2) 112int(1) 113int(2) 114object(MyStorage)#%d (2) { 115 ["bla"]=> 116 int(26) 117 ["storage":"SplObjectStorage":private]=> 118 array(2) { 119 ["%s"]=> 120 array(2) { 121 ["obj"]=> 122 object(TestClass)#%d (1) { 123 ["test"]=> 124 int(1) 125 } 126 ["inf"]=> 127 string(3) "foo" 128 } 129 ["%s"]=> 130 array(2) { 131 ["obj"]=> 132 object(TestClass)#%d (1) { 133 ["test"]=> 134 int(2) 135 } 136 ["inf"]=> 137 int(42) 138 } 139 } 140} 141===UNSERIALIZE2=== 142object(MyStorage)#%d (2) { 143 ["bla"]=> 144 int(26) 145 ["storage":"SplObjectStorage":private]=> 146 array(4) { 147 ["%s"]=> 148 array(2) { 149 ["obj"]=> 150 object(TestClass)#%d (1) { 151 ["test"]=> 152 int(1) 153 } 154 ["inf"]=> 155 string(3) "foo" 156 } 157 ["%s"]=> 158 array(2) { 159 ["obj"]=> 160 object(TestClass)#%d (1) { 161 ["test"]=> 162 int(2) 163 } 164 ["inf"]=> 165 int(42) 166 } 167 ["%s"]=> 168 array(2) { 169 ["obj"]=> 170 object(TestClass)#%d (1) { 171 ["test"]=> 172 int(3) 173 } 174 ["inf"]=> 175 object(stdClass)#%d (0) { 176 } 177 } 178 ["%s"]=> 179 array(2) { 180 ["obj"]=> 181 object(TestClass)#%d (1) { 182 ["test"]=> 183 int(4) 184 } 185 ["inf"]=> 186 object(TestClass)#%d (1) { 187 ["test"]=> 188 int(5) 189 } 190 } 191 } 192} 193int(1) 194object(TestClass)#%d (1) { 195 ["test"]=> 196 int(2) 197} 198int(42) 199string(3) "bar" 200===UNSERIALIZE3=== 201object(MyStorage)#%d (2) { 202 ["bla"]=> 203 int(26) 204 ["storage":"SplObjectStorage":private]=> 205 array(4) { 206 ["%s"]=> 207 array(2) { 208 ["obj"]=> 209 object(TestClass)#%d (1) { 210 ["test"]=> 211 int(1) 212 } 213 ["inf"]=> 214 string(3) "foo" 215 } 216 ["%s"]=> 217 array(2) { 218 ["obj"]=> 219 object(TestClass)#%d (1) { 220 ["test"]=> 221 int(2) 222 } 223 ["inf"]=> 224 string(3) "bar" 225 } 226 ["%s"]=> 227 array(2) { 228 ["obj"]=> 229 object(TestClass)#%d (1) { 230 ["test"]=> 231 int(3) 232 } 233 ["inf"]=> 234 object(stdClass)#%d (0) { 235 } 236 } 237 ["%s"]=> 238 array(2) { 239 ["obj"]=> 240 object(TestClass)#%d (1) { 241 ["test"]=> 242 int(4) 243 } 244 ["inf"]=> 245 object(TestClass)#%d (1) { 246 ["test"]=> 247 int(5) 248 } 249 } 250 } 251} 252int(2) 253object(TestClass)#7 (1) { 254 ["test"]=> 255 int(3) 256} 257===UNSERIALIZE4=== 258object(MyStorage)#%d (2) { 259 ["bla"]=> 260 int(26) 261 ["storage":"SplObjectStorage":private]=> 262 array(4) { 263 ["%s"]=> 264 array(2) { 265 ["obj"]=> 266 object(TestClass)#%d (1) { 267 ["test"]=> 268 int(1) 269 } 270 ["inf"]=> 271 string(3) "foo" 272 } 273 ["%s"]=> 274 array(2) { 275 ["obj"]=> 276 object(TestClass)#%d (1) { 277 ["test"]=> 278 int(2) 279 } 280 ["inf"]=> 281 string(3) "bar" 282 } 283 ["%s"]=> 284 array(2) { 285 ["obj"]=> 286 object(TestClass)#%d (1) { 287 ["test"]=> 288 int(3) 289 } 290 ["inf"]=> 291 string(8) "replaced" 292 } 293 ["%s"]=> 294 array(2) { 295 ["obj"]=> 296 object(TestClass)#%d (1) { 297 ["test"]=> 298 int(4) 299 } 300 ["inf"]=> 301 object(TestClass)#%d (1) { 302 ["test"]=> 303 int(5) 304 } 305 } 306 } 307} 308