iterator_039.phpt 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. --TEST--
  2. SPL: LimitIterator and backward seeking
  3. --FILE--
  4. <?php
  5. class NumericArrayIterator implements Iterator
  6. {
  7. protected $a;
  8. protected $i = 0;
  9. public function __construct($a)
  10. {
  11. echo __METHOD__ . "\n";
  12. $this->a = $a;
  13. }
  14. public function valid(): bool
  15. {
  16. echo __METHOD__ . "\n";
  17. return $this->i < count($this->a);
  18. }
  19. public function rewind(): void
  20. {
  21. echo __METHOD__ . "\n";
  22. $this->i = 0;
  23. }
  24. public function key(): mixed
  25. {
  26. echo __METHOD__ . "\n";
  27. return $this->i;
  28. }
  29. public function current(): mixed
  30. {
  31. echo __METHOD__ . "\n";
  32. return $this->a[$this->i];
  33. }
  34. public function next(): void
  35. {
  36. echo __METHOD__ . "\n";
  37. $this->i++;
  38. }
  39. }
  40. $it = new LimitIterator(new NumericArrayIterator(array(12, 25, 42, 56)));
  41. foreach($it as $k => $v)
  42. {
  43. var_dump($k);
  44. var_dump($v);
  45. }
  46. echo "===SEEK===\n";
  47. $it->seek(2);
  48. echo "===LOOP===\n";
  49. foreach(new NoRewindIterator($it) as $k => $v)
  50. {
  51. var_dump($k);
  52. var_dump($v);
  53. }
  54. ?>
  55. --EXPECT--
  56. NumericArrayIterator::__construct
  57. NumericArrayIterator::rewind
  58. NumericArrayIterator::valid
  59. NumericArrayIterator::valid
  60. NumericArrayIterator::current
  61. NumericArrayIterator::key
  62. int(0)
  63. int(12)
  64. NumericArrayIterator::next
  65. NumericArrayIterator::valid
  66. NumericArrayIterator::current
  67. NumericArrayIterator::key
  68. int(1)
  69. int(25)
  70. NumericArrayIterator::next
  71. NumericArrayIterator::valid
  72. NumericArrayIterator::current
  73. NumericArrayIterator::key
  74. int(2)
  75. int(42)
  76. NumericArrayIterator::next
  77. NumericArrayIterator::valid
  78. NumericArrayIterator::current
  79. NumericArrayIterator::key
  80. int(3)
  81. int(56)
  82. NumericArrayIterator::next
  83. NumericArrayIterator::valid
  84. ===SEEK===
  85. NumericArrayIterator::rewind
  86. NumericArrayIterator::valid
  87. NumericArrayIterator::next
  88. NumericArrayIterator::valid
  89. NumericArrayIterator::next
  90. NumericArrayIterator::valid
  91. NumericArrayIterator::valid
  92. NumericArrayIterator::current
  93. NumericArrayIterator::key
  94. ===LOOP===
  95. int(2)
  96. int(42)
  97. NumericArrayIterator::next
  98. NumericArrayIterator::valid
  99. NumericArrayIterator::current
  100. NumericArrayIterator::key
  101. int(3)
  102. int(56)
  103. NumericArrayIterator::next
  104. NumericArrayIterator::valid