iterators_006.phpt 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. --TEST--
  2. ZE2 iterators and array wrapping
  3. --FILE--
  4. <?php
  5. class ai implements Iterator {
  6. private $array;
  7. function __construct() {
  8. $this->array = array('foo', 'bar', 'baz');
  9. }
  10. function rewind(): void {
  11. reset($this->array);
  12. $this->next();
  13. }
  14. function valid(): bool {
  15. return $this->key !== NULL;
  16. }
  17. function key(): mixed {
  18. return $this->key;
  19. }
  20. function current(): mixed {
  21. return $this->current;
  22. }
  23. function next(): void {
  24. $this->key = key($this->array);
  25. $this->current = current($this->array);
  26. next($this->array);
  27. }
  28. }
  29. class a implements IteratorAggregate {
  30. public function getIterator(): Traversable {
  31. return new ai();
  32. }
  33. }
  34. $array = new a();
  35. foreach ($array as $property => $value) {
  36. print "$property: $value\n";
  37. }
  38. #$array = $array->getIterator();
  39. #$array->rewind();
  40. #$array->valid();
  41. #var_dump($array->key());
  42. #var_dump($array->current());
  43. echo "===2nd===\n";
  44. $array = new ai();
  45. foreach ($array as $property => $value) {
  46. print "$property: $value\n";
  47. }
  48. echo "===3rd===\n";
  49. foreach ($array as $property => $value) {
  50. print "$property: $value\n";
  51. }
  52. ?>
  53. --EXPECT--
  54. 0: foo
  55. 1: bar
  56. 2: baz
  57. ===2nd===
  58. 0: foo
  59. 1: bar
  60. 2: baz
  61. ===3rd===
  62. 0: foo
  63. 1: bar
  64. 2: baz