array_017.phpt 12 KB

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