1--TEST-- 2serialization: arrays with references amonst elements 3--FILE-- 4<?php 5/* Prototype : proto string serialize(mixed variable) 6 * Description: Returns a string representation of variable (which can later be unserialized) 7 * Source code: ext/standard/var.c 8 * Alias to functions: 9 */ 10/* Prototype : proto mixed unserialize(string variable_representation) 11 * Description: Takes a string representation of variable and recreates it 12 * Source code: ext/standard/var.c 13 * Alias to functions: 14 */ 15 16function check(&$a) { 17 var_dump($a); 18 $ser = serialize($a); 19 var_dump($ser); 20 21 $b = unserialize($ser); 22 var_dump($b); 23 $b[0] = "b0.changed"; 24 var_dump($b); 25 $b[1] = "b1.changed"; 26 var_dump($b); 27 $b[2] = "b2.changed"; 28 var_dump($b); 29} 30 31echo "\n\n--- No references:\n"; 32$a = array(); 33$a[0] = 1; 34$a[1] = 1; 35$a[2] = 1; 36check($a); 37 38echo "\n\n--- 0 refs 1:\n"; 39$a = array(); 40$a[0] = &$a[1]; 41$a[1] = 1; 42$a[2] = 1; 43check($a); 44 45echo "\n\n--- 0 refs 2:\n"; 46$a = array(); 47$a[0] = &$a[2]; 48$a[1] = 1; 49$a[2] = 1; 50check($a); 51 52echo "\n\n--- 1 refs 0:\n"; 53$a = array(); 54$a[0] = 1; 55$a[1] = &$a[0]; 56$a[2] = 1; 57check($a); 58 59echo "\n\n--- 1 refs 2:\n"; 60$a = array(); 61$a[0] = 1; 62$a[1] = &$a[2]; 63$a[2] = 1; 64check($a); 65 66echo "\n\n--- 2 refs 0:\n"; 67$a = array(); 68$a[0] = 1; 69$a[1] = 1; 70$a[2] = &$a[0]; 71check($a); 72 73echo "\n\n--- 2 refs 1:\n"; 74$a = array(); 75$a[0] = 1; 76$a[1] = 1; 77$a[2] = &$a[1]; 78check($a); 79 80echo "\n\n--- 0,1 ref 2:\n"; 81$a = array(); 82$a[0] = &$a[2]; 83$a[1] = &$a[2]; 84$a[2] = 1; 85check($a); 86 87echo "\n\n--- 0,2 ref 1:\n"; 88$a = array(); 89$a[0] = &$a[1]; 90$a[1] = 1; 91$a[2] = &$a[1]; 92check($a); 93 94echo "\n\n--- 1,2 ref 0:\n"; 95$a = array(); 96$a[0] = 1; 97$a[1] = &$a[0]; 98$a[2] = &$a[0]; 99check($a); 100 101echo "Done"; 102?> 103--EXPECTF-- 104 105 106--- No references: 107array(3) { 108 [0]=> 109 int(1) 110 [1]=> 111 int(1) 112 [2]=> 113 int(1) 114} 115string(30) "a:3:{i:0;i:1;i:1;i:1;i:2;i:1;}" 116array(3) { 117 [0]=> 118 int(1) 119 [1]=> 120 int(1) 121 [2]=> 122 int(1) 123} 124array(3) { 125 [0]=> 126 string(10) "b0.changed" 127 [1]=> 128 int(1) 129 [2]=> 130 int(1) 131} 132array(3) { 133 [0]=> 134 string(10) "b0.changed" 135 [1]=> 136 string(10) "b1.changed" 137 [2]=> 138 int(1) 139} 140array(3) { 141 [0]=> 142 string(10) "b0.changed" 143 [1]=> 144 string(10) "b1.changed" 145 [2]=> 146 string(10) "b2.changed" 147} 148 149 150--- 0 refs 1: 151array(3) { 152 [1]=> 153 &int(1) 154 [0]=> 155 &int(1) 156 [2]=> 157 int(1) 158} 159string(30) "a:3:{i:1;i:1;i:0;R:2;i:2;i:1;}" 160array(3) { 161 [1]=> 162 &int(1) 163 [0]=> 164 &int(1) 165 [2]=> 166 int(1) 167} 168array(3) { 169 [1]=> 170 &string(10) "b0.changed" 171 [0]=> 172 &string(10) "b0.changed" 173 [2]=> 174 int(1) 175} 176array(3) { 177 [1]=> 178 &string(10) "b1.changed" 179 [0]=> 180 &string(10) "b1.changed" 181 [2]=> 182 int(1) 183} 184array(3) { 185 [1]=> 186 &string(10) "b1.changed" 187 [0]=> 188 &string(10) "b1.changed" 189 [2]=> 190 string(10) "b2.changed" 191} 192 193 194--- 0 refs 2: 195array(3) { 196 [2]=> 197 &int(1) 198 [0]=> 199 &int(1) 200 [1]=> 201 int(1) 202} 203string(30) "a:3:{i:2;i:1;i:0;R:2;i:1;i:1;}" 204array(3) { 205 [2]=> 206 &int(1) 207 [0]=> 208 &int(1) 209 [1]=> 210 int(1) 211} 212array(3) { 213 [2]=> 214 &string(10) "b0.changed" 215 [0]=> 216 &string(10) "b0.changed" 217 [1]=> 218 int(1) 219} 220array(3) { 221 [2]=> 222 &string(10) "b0.changed" 223 [0]=> 224 &string(10) "b0.changed" 225 [1]=> 226 string(10) "b1.changed" 227} 228array(3) { 229 [2]=> 230 &string(10) "b2.changed" 231 [0]=> 232 &string(10) "b2.changed" 233 [1]=> 234 string(10) "b1.changed" 235} 236 237 238--- 1 refs 0: 239array(3) { 240 [0]=> 241 &int(1) 242 [1]=> 243 &int(1) 244 [2]=> 245 int(1) 246} 247string(30) "a:3:{i:0;i:1;i:1;R:2;i:2;i:1;}" 248array(3) { 249 [0]=> 250 &int(1) 251 [1]=> 252 &int(1) 253 [2]=> 254 int(1) 255} 256array(3) { 257 [0]=> 258 &string(10) "b0.changed" 259 [1]=> 260 &string(10) "b0.changed" 261 [2]=> 262 int(1) 263} 264array(3) { 265 [0]=> 266 &string(10) "b1.changed" 267 [1]=> 268 &string(10) "b1.changed" 269 [2]=> 270 int(1) 271} 272array(3) { 273 [0]=> 274 &string(10) "b1.changed" 275 [1]=> 276 &string(10) "b1.changed" 277 [2]=> 278 string(10) "b2.changed" 279} 280 281 282--- 1 refs 2: 283array(3) { 284 [0]=> 285 int(1) 286 [2]=> 287 &int(1) 288 [1]=> 289 &int(1) 290} 291string(30) "a:3:{i:0;i:1;i:2;i:1;i:1;R:3;}" 292array(3) { 293 [0]=> 294 int(1) 295 [2]=> 296 &int(1) 297 [1]=> 298 &int(1) 299} 300array(3) { 301 [0]=> 302 string(10) "b0.changed" 303 [2]=> 304 &int(1) 305 [1]=> 306 &int(1) 307} 308array(3) { 309 [0]=> 310 string(10) "b0.changed" 311 [2]=> 312 &string(10) "b1.changed" 313 [1]=> 314 &string(10) "b1.changed" 315} 316array(3) { 317 [0]=> 318 string(10) "b0.changed" 319 [2]=> 320 &string(10) "b2.changed" 321 [1]=> 322 &string(10) "b2.changed" 323} 324 325 326--- 2 refs 0: 327array(3) { 328 [0]=> 329 &int(1) 330 [1]=> 331 int(1) 332 [2]=> 333 &int(1) 334} 335string(30) "a:3:{i:0;i:1;i:1;i:1;i:2;R:2;}" 336array(3) { 337 [0]=> 338 &int(1) 339 [1]=> 340 int(1) 341 [2]=> 342 &int(1) 343} 344array(3) { 345 [0]=> 346 &string(10) "b0.changed" 347 [1]=> 348 int(1) 349 [2]=> 350 &string(10) "b0.changed" 351} 352array(3) { 353 [0]=> 354 &string(10) "b0.changed" 355 [1]=> 356 string(10) "b1.changed" 357 [2]=> 358 &string(10) "b0.changed" 359} 360array(3) { 361 [0]=> 362 &string(10) "b2.changed" 363 [1]=> 364 string(10) "b1.changed" 365 [2]=> 366 &string(10) "b2.changed" 367} 368 369 370--- 2 refs 1: 371array(3) { 372 [0]=> 373 int(1) 374 [1]=> 375 &int(1) 376 [2]=> 377 &int(1) 378} 379string(30) "a:3:{i:0;i:1;i:1;i:1;i:2;R:3;}" 380array(3) { 381 [0]=> 382 int(1) 383 [1]=> 384 &int(1) 385 [2]=> 386 &int(1) 387} 388array(3) { 389 [0]=> 390 string(10) "b0.changed" 391 [1]=> 392 &int(1) 393 [2]=> 394 &int(1) 395} 396array(3) { 397 [0]=> 398 string(10) "b0.changed" 399 [1]=> 400 &string(10) "b1.changed" 401 [2]=> 402 &string(10) "b1.changed" 403} 404array(3) { 405 [0]=> 406 string(10) "b0.changed" 407 [1]=> 408 &string(10) "b2.changed" 409 [2]=> 410 &string(10) "b2.changed" 411} 412 413 414--- 0,1 ref 2: 415array(3) { 416 [2]=> 417 &int(1) 418 [0]=> 419 &int(1) 420 [1]=> 421 &int(1) 422} 423string(30) "a:3:{i:2;i:1;i:0;R:2;i:1;R:2;}" 424array(3) { 425 [2]=> 426 &int(1) 427 [0]=> 428 &int(1) 429 [1]=> 430 &int(1) 431} 432array(3) { 433 [2]=> 434 &string(10) "b0.changed" 435 [0]=> 436 &string(10) "b0.changed" 437 [1]=> 438 &string(10) "b0.changed" 439} 440array(3) { 441 [2]=> 442 &string(10) "b1.changed" 443 [0]=> 444 &string(10) "b1.changed" 445 [1]=> 446 &string(10) "b1.changed" 447} 448array(3) { 449 [2]=> 450 &string(10) "b2.changed" 451 [0]=> 452 &string(10) "b2.changed" 453 [1]=> 454 &string(10) "b2.changed" 455} 456 457 458--- 0,2 ref 1: 459array(3) { 460 [1]=> 461 &int(1) 462 [0]=> 463 &int(1) 464 [2]=> 465 &int(1) 466} 467string(30) "a:3:{i:1;i:1;i:0;R:2;i:2;R:2;}" 468array(3) { 469 [1]=> 470 &int(1) 471 [0]=> 472 &int(1) 473 [2]=> 474 &int(1) 475} 476array(3) { 477 [1]=> 478 &string(10) "b0.changed" 479 [0]=> 480 &string(10) "b0.changed" 481 [2]=> 482 &string(10) "b0.changed" 483} 484array(3) { 485 [1]=> 486 &string(10) "b1.changed" 487 [0]=> 488 &string(10) "b1.changed" 489 [2]=> 490 &string(10) "b1.changed" 491} 492array(3) { 493 [1]=> 494 &string(10) "b2.changed" 495 [0]=> 496 &string(10) "b2.changed" 497 [2]=> 498 &string(10) "b2.changed" 499} 500 501 502--- 1,2 ref 0: 503array(3) { 504 [0]=> 505 &int(1) 506 [1]=> 507 &int(1) 508 [2]=> 509 &int(1) 510} 511string(30) "a:3:{i:0;i:1;i:1;R:2;i:2;R:2;}" 512array(3) { 513 [0]=> 514 &int(1) 515 [1]=> 516 &int(1) 517 [2]=> 518 &int(1) 519} 520array(3) { 521 [0]=> 522 &string(10) "b0.changed" 523 [1]=> 524 &string(10) "b0.changed" 525 [2]=> 526 &string(10) "b0.changed" 527} 528array(3) { 529 [0]=> 530 &string(10) "b1.changed" 531 [1]=> 532 &string(10) "b1.changed" 533 [2]=> 534 &string(10) "b1.changed" 535} 536array(3) { 537 [0]=> 538 &string(10) "b2.changed" 539 [1]=> 540 &string(10) "b2.changed" 541 [2]=> 542 &string(10) "b2.changed" 543} 544Done