array_017.phpt 12 KB

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