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