1--TEST-- 2SPL: ArrayObject::exchangeArray($this) 3--FILE-- 4<?php 5 6class ArrayIteratorEx extends ArrayIterator 7{ 8 public $pub2 = 1; 9 protected $pro2 = 2; 10 private $pri2 = 3; 11 12 function __construct($ar, $flags = 0) 13 { 14 echo __METHOD__ . "()\n"; 15 parent::__construct($ar, $flags); 16 $this->imp2 = 4; 17 } 18 19 function dump() 20 { 21 echo __METHOD__ . "()\n"; 22 var_dump(array('Flags'=>$this->getFlags() 23 ,'OVars'=>get_object_vars($this) 24 ,'$this'=>$this)); 25 } 26 27 function setFlags($flags) 28 { 29 echo __METHOD__ . "($flags)\n"; 30 ArrayIterator::setFlags($flags); 31 } 32} 33 34class ArrayObjectEx extends ArrayObject 35{ 36 public $pub1 = 1; 37 protected $pro1 = 2; 38 private $pri1 = 3; 39 40 function __construct($ar = array(), $flags = 0) 41 { 42 echo __METHOD__ . "()\n"; 43 parent::__construct($ar, $flags); 44 $this->imp1 = 4; 45 } 46 47 function exchange() 48 { 49 echo __METHOD__ . "()\n"; 50 $this->exchangeArray($this); 51 } 52 53 function dump() 54 { 55 echo __METHOD__ . "()\n"; 56 var_dump(array('Flags'=>$this->getFlags() 57 ,'OVars'=>get_object_vars($this) 58 ,'$this'=>$this)); 59 } 60 61 function show() 62 { 63 echo __METHOD__ . "()\n"; 64 foreach($this as $n => $v) 65 { 66 var_dump(array($n => $v)); 67 } 68 } 69 70 function setFlags($flags) 71 { 72 echo __METHOD__ . "($flags)\n"; 73 ArrayObject::setFlags($flags); 74 } 75 76 function getIterator() 77 { 78 echo __METHOD__ . "()\n"; 79 $it = new ArrayIteratorEx($this, $this->getFlags()); 80 $it->dyn2 = 5; 81 $it->dump(); 82 return $it; 83 } 84} 85 86function check($obj, $flags) 87{ 88 echo "===CHECK===\n"; 89 90 $obj->setFlags($flags); 91 $obj->dump(); 92 $obj->show(); 93 94 echo "===FOREACH===\n"; 95 96 $it = $obj->getIterator(); 97 foreach($it as $n => $v) 98 { 99 var_dump(array($n => $v)); 100 } 101 102 echo "===PROPERTY===\n"; 103 104 var_dump($obj->pub1); 105 var_dump(isset($obj->a)); 106 $obj->setFlags($flags | 2); 107 var_dump($obj->pub1); 108 var_dump(isset($obj->a)); 109 110 var_dump($it->pub2); 111 var_dump(isset($it->pub1)); 112 $it->setFlags($flags | 2); 113 var_dump($it->pub2); 114 var_dump(isset($it->pub1)); 115} 116 117$obj = new ArrayObjectEx(array(0=>1,'a'=>25, 'pub1'=>42), 0); 118$obj->dyn1 = 5; 119 120check($obj, 0); 121check($obj, 1); 122 123echo "#####EXCHANGE#####\n"; 124 125$obj->exchange(); 126 127check($obj, 0); 128check($obj, 1); 129 130?> 131===DONE=== 132<?php exit(0); ?> 133--EXPECTF-- 134ArrayObjectEx::__construct() 135===CHECK=== 136ArrayObjectEx::setFlags(0) 137ArrayObjectEx::dump() 138array(3) { 139 ["Flags"]=> 140 int(0) 141 ["OVars"]=> 142 array(2) { 143 ["a"]=> 144 int(25) 145 ["pub1"]=> 146 int(42) 147 } 148 ["$this"]=> 149 object(ArrayObjectEx)#%d (6) { 150 ["pub1"]=> 151 int(1) 152 ["pro1":protected]=> 153 int(2) 154 ["pri1":"ArrayObjectEx":private]=> 155 int(3) 156 ["imp1"]=> 157 int(4) 158 ["dyn1"]=> 159 int(5) 160 ["storage":"ArrayObject":private]=> 161 array(3) { 162 [0]=> 163 int(1) 164 ["a"]=> 165 int(25) 166 ["pub1"]=> 167 int(42) 168 } 169 } 170} 171ArrayObjectEx::show() 172ArrayObjectEx::getIterator() 173ArrayIteratorEx::__construct() 174ArrayIteratorEx::dump() 175array(3) { 176 ["Flags"]=> 177 int(0) 178 ["OVars"]=> 179 array(2) { 180 ["a"]=> 181 int(25) 182 ["pub1"]=> 183 int(42) 184 } 185 ["$this"]=> 186 object(ArrayIteratorEx)#%d (6) { 187 ["pub2"]=> 188 int(1) 189 ["pro2":protected]=> 190 int(2) 191 ["pri2":"ArrayIteratorEx":private]=> 192 int(3) 193 ["imp2"]=> 194 int(4) 195 ["dyn2"]=> 196 int(5) 197 ["storage":"ArrayIterator":private]=> 198 object(ArrayObjectEx)#%d (6) { 199 ["pub1"]=> 200 int(1) 201 ["pro1":protected]=> 202 int(2) 203 ["pri1":"ArrayObjectEx":private]=> 204 int(3) 205 ["imp1"]=> 206 int(4) 207 ["dyn1"]=> 208 int(5) 209 ["storage":"ArrayObject":private]=> 210 array(3) { 211 [0]=> 212 int(1) 213 ["a"]=> 214 int(25) 215 ["pub1"]=> 216 int(42) 217 } 218 } 219 } 220} 221array(1) { 222 [0]=> 223 int(1) 224} 225array(1) { 226 ["a"]=> 227 int(25) 228} 229array(1) { 230 ["pub1"]=> 231 int(42) 232} 233===FOREACH=== 234ArrayObjectEx::getIterator() 235ArrayIteratorEx::__construct() 236ArrayIteratorEx::dump() 237array(3) { 238 ["Flags"]=> 239 int(0) 240 ["OVars"]=> 241 array(2) { 242 ["a"]=> 243 int(25) 244 ["pub1"]=> 245 int(42) 246 } 247 ["$this"]=> 248 object(ArrayIteratorEx)#%d (6) { 249 ["pub2"]=> 250 int(1) 251 ["pro2":protected]=> 252 int(2) 253 ["pri2":"ArrayIteratorEx":private]=> 254 int(3) 255 ["imp2"]=> 256 int(4) 257 ["dyn2"]=> 258 int(5) 259 ["storage":"ArrayIterator":private]=> 260 object(ArrayObjectEx)#%d (6) { 261 ["pub1"]=> 262 int(1) 263 ["pro1":protected]=> 264 int(2) 265 ["pri1":"ArrayObjectEx":private]=> 266 int(3) 267 ["imp1"]=> 268 int(4) 269 ["dyn1"]=> 270 int(5) 271 ["storage":"ArrayObject":private]=> 272 array(3) { 273 [0]=> 274 int(1) 275 ["a"]=> 276 int(25) 277 ["pub1"]=> 278 int(42) 279 } 280 } 281 } 282} 283array(1) { 284 [0]=> 285 int(1) 286} 287array(1) { 288 ["a"]=> 289 int(25) 290} 291array(1) { 292 ["pub1"]=> 293 int(42) 294} 295===PROPERTY=== 296int(1) 297bool(false) 298ArrayObjectEx::setFlags(2) 299int(1) 300bool(true) 301int(1) 302bool(false) 303ArrayIteratorEx::setFlags(2) 304int(1) 305bool(true) 306===CHECK=== 307ArrayObjectEx::setFlags(1) 308ArrayObjectEx::dump() 309array(3) { 310 ["Flags"]=> 311 int(1) 312 ["OVars"]=> 313 array(5) { 314 ["pub1"]=> 315 int(1) 316 ["pro1"]=> 317 int(2) 318 ["pri1"]=> 319 int(3) 320 ["imp1"]=> 321 int(4) 322 ["dyn1"]=> 323 int(5) 324 } 325 ["$this"]=> 326 object(ArrayObjectEx)#%d (6) { 327 ["pub1"]=> 328 int(1) 329 ["pro1":protected]=> 330 int(2) 331 ["pri1":"ArrayObjectEx":private]=> 332 int(3) 333 ["imp1"]=> 334 int(4) 335 ["dyn1"]=> 336 int(5) 337 ["storage":"ArrayObject":private]=> 338 array(3) { 339 [0]=> 340 int(1) 341 ["a"]=> 342 int(25) 343 ["pub1"]=> 344 int(42) 345 } 346 } 347} 348ArrayObjectEx::show() 349ArrayObjectEx::getIterator() 350ArrayIteratorEx::__construct() 351ArrayIteratorEx::dump() 352array(3) { 353 ["Flags"]=> 354 int(1) 355 ["OVars"]=> 356 array(5) { 357 ["pub2"]=> 358 int(1) 359 ["pro2"]=> 360 int(2) 361 ["pri2"]=> 362 int(3) 363 ["imp2"]=> 364 int(4) 365 ["dyn2"]=> 366 int(5) 367 } 368 ["$this"]=> 369 object(ArrayIteratorEx)#%d (6) { 370 ["pub2"]=> 371 int(1) 372 ["pro2":protected]=> 373 int(2) 374 ["pri2":"ArrayIteratorEx":private]=> 375 int(3) 376 ["imp2"]=> 377 int(4) 378 ["dyn2"]=> 379 int(5) 380 ["storage":"ArrayIterator":private]=> 381 object(ArrayObjectEx)#%d (6) { 382 ["pub1"]=> 383 int(1) 384 ["pro1":protected]=> 385 int(2) 386 ["pri1":"ArrayObjectEx":private]=> 387 int(3) 388 ["imp1"]=> 389 int(4) 390 ["dyn1"]=> 391 int(5) 392 ["storage":"ArrayObject":private]=> 393 array(3) { 394 [0]=> 395 int(1) 396 ["a"]=> 397 int(25) 398 ["pub1"]=> 399 int(42) 400 } 401 } 402 } 403} 404array(1) { 405 [0]=> 406 int(1) 407} 408array(1) { 409 ["a"]=> 410 int(25) 411} 412array(1) { 413 ["pub1"]=> 414 int(42) 415} 416===FOREACH=== 417ArrayObjectEx::getIterator() 418ArrayIteratorEx::__construct() 419ArrayIteratorEx::dump() 420array(3) { 421 ["Flags"]=> 422 int(1) 423 ["OVars"]=> 424 array(5) { 425 ["pub2"]=> 426 int(1) 427 ["pro2"]=> 428 int(2) 429 ["pri2"]=> 430 int(3) 431 ["imp2"]=> 432 int(4) 433 ["dyn2"]=> 434 int(5) 435 } 436 ["$this"]=> 437 object(ArrayIteratorEx)#%d (6) { 438 ["pub2"]=> 439 int(1) 440 ["pro2":protected]=> 441 int(2) 442 ["pri2":"ArrayIteratorEx":private]=> 443 int(3) 444 ["imp2"]=> 445 int(4) 446 ["dyn2"]=> 447 int(5) 448 ["storage":"ArrayIterator":private]=> 449 object(ArrayObjectEx)#%d (6) { 450 ["pub1"]=> 451 int(1) 452 ["pro1":protected]=> 453 int(2) 454 ["pri1":"ArrayObjectEx":private]=> 455 int(3) 456 ["imp1"]=> 457 int(4) 458 ["dyn1"]=> 459 int(5) 460 ["storage":"ArrayObject":private]=> 461 array(3) { 462 [0]=> 463 int(1) 464 ["a"]=> 465 int(25) 466 ["pub1"]=> 467 int(42) 468 } 469 } 470 } 471} 472array(1) { 473 [0]=> 474 int(1) 475} 476array(1) { 477 ["a"]=> 478 int(25) 479} 480array(1) { 481 ["pub1"]=> 482 int(42) 483} 484===PROPERTY=== 485int(1) 486bool(false) 487ArrayObjectEx::setFlags(3) 488int(1) 489bool(true) 490int(1) 491bool(false) 492ArrayIteratorEx::setFlags(3) 493int(1) 494bool(true) 495#####EXCHANGE##### 496ArrayObjectEx::exchange() 497===CHECK=== 498ArrayObjectEx::setFlags(0) 499ArrayObjectEx::dump() 500array(3) { 501 ["Flags"]=> 502 int(0) 503 ["OVars"]=> 504 array(5) { 505 ["pub1"]=> 506 int(1) 507 ["pro1"]=> 508 int(2) 509 ["pri1"]=> 510 int(3) 511 ["imp1"]=> 512 int(4) 513 ["dyn1"]=> 514 int(5) 515 } 516 ["$this"]=> 517 object(ArrayObjectEx)#%d (5) { 518 ["pub1"]=> 519 int(1) 520 ["pro1":protected]=> 521 int(2) 522 ["pri1":"ArrayObjectEx":private]=> 523 int(3) 524 ["imp1"]=> 525 int(4) 526 ["dyn1"]=> 527 int(5) 528 } 529} 530ArrayObjectEx::show() 531ArrayObjectEx::getIterator() 532ArrayIteratorEx::__construct() 533ArrayIteratorEx::dump() 534array(3) { 535 ["Flags"]=> 536 int(0) 537 ["OVars"]=> 538 array(4) { 539 ["pub1"]=> 540 int(1) 541 ["pro1"]=> 542 int(2) 543 ["imp1"]=> 544 int(4) 545 ["dyn1"]=> 546 int(5) 547 } 548 ["$this"]=> 549 object(ArrayIteratorEx)#%d (6) { 550 ["pub2"]=> 551 int(1) 552 ["pro2":protected]=> 553 int(2) 554 ["pri2":"ArrayIteratorEx":private]=> 555 int(3) 556 ["imp2"]=> 557 int(4) 558 ["dyn2"]=> 559 int(5) 560 ["storage":"ArrayIterator":private]=> 561 object(ArrayObjectEx)#%d (5) { 562 ["pub1"]=> 563 int(1) 564 ["pro1":protected]=> 565 int(2) 566 ["pri1":"ArrayObjectEx":private]=> 567 int(3) 568 ["imp1"]=> 569 int(4) 570 ["dyn1"]=> 571 int(5) 572 } 573 } 574} 575array(1) { 576 ["pub1"]=> 577 int(1) 578} 579array(1) { 580 ["imp1"]=> 581 int(4) 582} 583array(1) { 584 ["dyn1"]=> 585 int(5) 586} 587===FOREACH=== 588ArrayObjectEx::getIterator() 589ArrayIteratorEx::__construct() 590ArrayIteratorEx::dump() 591array(3) { 592 ["Flags"]=> 593 int(0) 594 ["OVars"]=> 595 array(4) { 596 ["pub1"]=> 597 int(1) 598 ["pro1"]=> 599 int(2) 600 ["imp1"]=> 601 int(4) 602 ["dyn1"]=> 603 int(5) 604 } 605 ["$this"]=> 606 object(ArrayIteratorEx)#%d (6) { 607 ["pub2"]=> 608 int(1) 609 ["pro2":protected]=> 610 int(2) 611 ["pri2":"ArrayIteratorEx":private]=> 612 int(3) 613 ["imp2"]=> 614 int(4) 615 ["dyn2"]=> 616 int(5) 617 ["storage":"ArrayIterator":private]=> 618 object(ArrayObjectEx)#%d (5) { 619 ["pub1"]=> 620 int(1) 621 ["pro1":protected]=> 622 int(2) 623 ["pri1":"ArrayObjectEx":private]=> 624 int(3) 625 ["imp1"]=> 626 int(4) 627 ["dyn1"]=> 628 int(5) 629 } 630 } 631} 632array(1) { 633 ["pub1"]=> 634 int(1) 635} 636array(1) { 637 ["imp1"]=> 638 int(4) 639} 640array(1) { 641 ["dyn1"]=> 642 int(5) 643} 644===PROPERTY=== 645int(1) 646bool(false) 647ArrayObjectEx::setFlags(2) 648int(1) 649bool(false) 650int(1) 651bool(false) 652ArrayIteratorEx::setFlags(2) 653int(1) 654bool(true) 655===CHECK=== 656ArrayObjectEx::setFlags(1) 657ArrayObjectEx::dump() 658array(3) { 659 ["Flags"]=> 660 int(1) 661 ["OVars"]=> 662 array(5) { 663 ["pub1"]=> 664 int(1) 665 ["pro1"]=> 666 int(2) 667 ["pri1"]=> 668 int(3) 669 ["imp1"]=> 670 int(4) 671 ["dyn1"]=> 672 int(5) 673 } 674 ["$this"]=> 675 object(ArrayObjectEx)#%d (5) { 676 ["pub1"]=> 677 int(1) 678 ["pro1":protected]=> 679 int(2) 680 ["pri1":"ArrayObjectEx":private]=> 681 int(3) 682 ["imp1"]=> 683 int(4) 684 ["dyn1"]=> 685 int(5) 686 } 687} 688ArrayObjectEx::show() 689ArrayObjectEx::getIterator() 690ArrayIteratorEx::__construct() 691ArrayIteratorEx::dump() 692array(3) { 693 ["Flags"]=> 694 int(1) 695 ["OVars"]=> 696 array(5) { 697 ["pub2"]=> 698 int(1) 699 ["pro2"]=> 700 int(2) 701 ["pri2"]=> 702 int(3) 703 ["imp2"]=> 704 int(4) 705 ["dyn2"]=> 706 int(5) 707 } 708 ["$this"]=> 709 object(ArrayIteratorEx)#%d (6) { 710 ["pub2"]=> 711 int(1) 712 ["pro2":protected]=> 713 int(2) 714 ["pri2":"ArrayIteratorEx":private]=> 715 int(3) 716 ["imp2"]=> 717 int(4) 718 ["dyn2"]=> 719 int(5) 720 ["storage":"ArrayIterator":private]=> 721 object(ArrayObjectEx)#%d (5) { 722 ["pub1"]=> 723 int(1) 724 ["pro1":protected]=> 725 int(2) 726 ["pri1":"ArrayObjectEx":private]=> 727 int(3) 728 ["imp1"]=> 729 int(4) 730 ["dyn1"]=> 731 int(5) 732 } 733 } 734} 735array(1) { 736 ["pub1"]=> 737 int(1) 738} 739array(1) { 740 ["imp1"]=> 741 int(4) 742} 743array(1) { 744 ["dyn1"]=> 745 int(5) 746} 747===FOREACH=== 748ArrayObjectEx::getIterator() 749ArrayIteratorEx::__construct() 750ArrayIteratorEx::dump() 751array(3) { 752 ["Flags"]=> 753 int(1) 754 ["OVars"]=> 755 array(5) { 756 ["pub2"]=> 757 int(1) 758 ["pro2"]=> 759 int(2) 760 ["pri2"]=> 761 int(3) 762 ["imp2"]=> 763 int(4) 764 ["dyn2"]=> 765 int(5) 766 } 767 ["$this"]=> 768 object(ArrayIteratorEx)#%d (6) { 769 ["pub2"]=> 770 int(1) 771 ["pro2":protected]=> 772 int(2) 773 ["pri2":"ArrayIteratorEx":private]=> 774 int(3) 775 ["imp2"]=> 776 int(4) 777 ["dyn2"]=> 778 int(5) 779 ["storage":"ArrayIterator":private]=> 780 object(ArrayObjectEx)#%d (5) { 781 ["pub1"]=> 782 int(1) 783 ["pro1":protected]=> 784 int(2) 785 ["pri1":"ArrayObjectEx":private]=> 786 int(3) 787 ["imp1"]=> 788 int(4) 789 ["dyn1"]=> 790 int(5) 791 } 792 } 793} 794array(1) { 795 ["pub1"]=> 796 int(1) 797} 798array(1) { 799 ["imp1"]=> 800 int(4) 801} 802array(1) { 803 ["dyn1"]=> 804 int(5) 805} 806===PROPERTY=== 807int(1) 808bool(false) 809ArrayObjectEx::setFlags(3) 810int(1) 811bool(false) 812int(1) 813bool(false) 814ArrayIteratorEx::setFlags(3) 815int(1) 816bool(true) 817===DONE=== 818