iterator_014.phpt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. --TEST--
  2. SPL: RecursiveIteratorIterator and beginChildren/endChildren
  3. --FILE--
  4. <?php
  5. class MyRecursiveArrayIterator extends RecursiveArrayIterator
  6. {
  7. function valid(): bool
  8. {
  9. if (!parent::valid())
  10. {
  11. echo __METHOD__ . " = false\n";
  12. return false;
  13. }
  14. else
  15. {
  16. return true;
  17. }
  18. }
  19. function getChildren(): ?RecursiveArrayIterator
  20. {
  21. echo __METHOD__ . "\n";
  22. return parent::getChildren();
  23. }
  24. }
  25. class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator
  26. {
  27. function rewind(): void
  28. {
  29. echo __METHOD__ . "\n";
  30. parent::rewind();
  31. }
  32. function valid(): bool
  33. {
  34. echo __METHOD__ . "\n";
  35. return parent::valid();
  36. }
  37. function current(): mixed
  38. {
  39. echo __METHOD__ . "\n";
  40. return parent::current();
  41. }
  42. function key(): mixed
  43. {
  44. echo __METHOD__ . "\n";
  45. return parent::key();
  46. }
  47. function next(): void
  48. {
  49. echo __METHOD__ . "\n";
  50. parent::next();
  51. }
  52. function beginChildren(): void
  53. {
  54. echo __METHOD__ . "(".$this->getDepth().")\n";
  55. }
  56. function endChildren(): void
  57. {
  58. echo __METHOD__ . "(".$this->getDepth().")\n";
  59. }
  60. }
  61. foreach(new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"))), array("ca"), "d"))) as $k=>$v)
  62. {
  63. echo "$k=>$v\n";
  64. }
  65. ?>
  66. --EXPECT--
  67. RecursiveArrayIteratorIterator::rewind
  68. RecursiveArrayIteratorIterator::valid
  69. RecursiveArrayIteratorIterator::current
  70. RecursiveArrayIteratorIterator::key
  71. 0=>a
  72. RecursiveArrayIteratorIterator::next
  73. MyRecursiveArrayIterator::getChildren
  74. RecursiveArrayIteratorIterator::beginChildren(1)
  75. RecursiveArrayIteratorIterator::valid
  76. RecursiveArrayIteratorIterator::current
  77. RecursiveArrayIteratorIterator::key
  78. 0=>ba
  79. RecursiveArrayIteratorIterator::next
  80. MyRecursiveArrayIterator::getChildren
  81. RecursiveArrayIteratorIterator::beginChildren(2)
  82. RecursiveArrayIteratorIterator::valid
  83. RecursiveArrayIteratorIterator::current
  84. RecursiveArrayIteratorIterator::key
  85. 0=>bba
  86. RecursiveArrayIteratorIterator::next
  87. RecursiveArrayIteratorIterator::valid
  88. RecursiveArrayIteratorIterator::current
  89. RecursiveArrayIteratorIterator::key
  90. 1=>bbb
  91. RecursiveArrayIteratorIterator::next
  92. MyRecursiveArrayIterator::valid = false
  93. RecursiveArrayIteratorIterator::endChildren(2)
  94. MyRecursiveArrayIterator::getChildren
  95. RecursiveArrayIteratorIterator::beginChildren(2)
  96. MyRecursiveArrayIterator::getChildren
  97. RecursiveArrayIteratorIterator::beginChildren(3)
  98. RecursiveArrayIteratorIterator::valid
  99. RecursiveArrayIteratorIterator::current
  100. RecursiveArrayIteratorIterator::key
  101. 0=>bcaa
  102. RecursiveArrayIteratorIterator::next
  103. MyRecursiveArrayIterator::valid = false
  104. RecursiveArrayIteratorIterator::endChildren(3)
  105. MyRecursiveArrayIterator::valid = false
  106. RecursiveArrayIteratorIterator::endChildren(2)
  107. MyRecursiveArrayIterator::valid = false
  108. RecursiveArrayIteratorIterator::endChildren(1)
  109. MyRecursiveArrayIterator::getChildren
  110. RecursiveArrayIteratorIterator::beginChildren(1)
  111. RecursiveArrayIteratorIterator::valid
  112. RecursiveArrayIteratorIterator::current
  113. RecursiveArrayIteratorIterator::key
  114. 0=>ca
  115. RecursiveArrayIteratorIterator::next
  116. MyRecursiveArrayIterator::valid = false
  117. RecursiveArrayIteratorIterator::endChildren(1)
  118. RecursiveArrayIteratorIterator::valid
  119. RecursiveArrayIteratorIterator::current
  120. RecursiveArrayIteratorIterator::key
  121. 3=>d
  122. RecursiveArrayIteratorIterator::next
  123. MyRecursiveArrayIterator::valid = false
  124. RecursiveArrayIteratorIterator::valid
  125. MyRecursiveArrayIterator::valid = false