Annotation of embedaddon/php/tests/lang/foreachLoopIteratorAggregate.003.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: foreach with nested iteratorAggregates
! 3: --FILE--
! 4: <?php
! 5: class EnglishMealIterator implements Iterator {
! 6: private $pos=0;
! 7: private $myContent=array("breakfast", "dinner", "tea");
! 8:
! 9: public function valid() {
! 10: global $indent;
! 11: echo "$indent--> " . __METHOD__ . " ($this->pos)\n";
! 12: return $this->pos<3;
! 13: }
! 14:
! 15: public function next() {
! 16: global $indent;
! 17: echo "$indent--> " . __METHOD__ . " ($this->pos)\n";
! 18: return $this->myContent[$this->pos++];
! 19: }
! 20:
! 21: public function rewind() {
! 22: global $indent;
! 23: echo "$indent--> " . __METHOD__ . " ($this->pos)\n";
! 24: $this->pos=0;
! 25: }
! 26:
! 27: public function current() {
! 28: global $indent;
! 29: echo "$indent--> " . __METHOD__ . " ($this->pos)\n";
! 30: return $this->myContent[$this->pos];
! 31: }
! 32:
! 33: public function key() {
! 34: global $indent;
! 35: echo "$indent--> " . __METHOD__ . " ($this->pos)\n";
! 36: return "meal " . $this->pos;
! 37: }
! 38:
! 39: }
! 40:
! 41: class A1 implements IteratorAggregate {
! 42: function getIterator() {
! 43: return new EnglishMealIterator;
! 44: }
! 45: }
! 46:
! 47: class A2 implements IteratorAggregate {
! 48: function getIterator() {
! 49: return new A1;
! 50: }
! 51: }
! 52:
! 53: class A3 implements IteratorAggregate {
! 54: function getIterator() {
! 55: return new A2;
! 56: }
! 57: }
! 58:
! 59: echo "\n-----( A1: )-----\n";
! 60: foreach (new A1 as $k=>$v) {
! 61: echo "$k => $v\n";
! 62: }
! 63:
! 64: echo "\n-----( A2: )-----\n";
! 65: foreach (new A2 as $k=>$v) {
! 66: echo "$k => $v\n";
! 67: }
! 68:
! 69: echo "\n-----( A3: )-----\n";
! 70: foreach (new A3 as $k=>$v) {
! 71: echo "$k => $v\n";
! 72: }
! 73:
! 74: ?>
! 75: ===DONE===
! 76: --EXPECTF--
! 77: -----( A1: )-----
! 78: --> EnglishMealIterator::rewind (0)
! 79: --> EnglishMealIterator::valid (0)
! 80: --> EnglishMealIterator::current (0)
! 81: --> EnglishMealIterator::key (0)
! 82: meal 0 => breakfast
! 83: --> EnglishMealIterator::next (0)
! 84: --> EnglishMealIterator::valid (1)
! 85: --> EnglishMealIterator::current (1)
! 86: --> EnglishMealIterator::key (1)
! 87: meal 1 => dinner
! 88: --> EnglishMealIterator::next (1)
! 89: --> EnglishMealIterator::valid (2)
! 90: --> EnglishMealIterator::current (2)
! 91: --> EnglishMealIterator::key (2)
! 92: meal 2 => tea
! 93: --> EnglishMealIterator::next (2)
! 94: --> EnglishMealIterator::valid (3)
! 95:
! 96: -----( A2: )-----
! 97: --> EnglishMealIterator::rewind (0)
! 98: --> EnglishMealIterator::valid (0)
! 99: --> EnglishMealIterator::current (0)
! 100: --> EnglishMealIterator::key (0)
! 101: meal 0 => breakfast
! 102: --> EnglishMealIterator::next (0)
! 103: --> EnglishMealIterator::valid (1)
! 104: --> EnglishMealIterator::current (1)
! 105: --> EnglishMealIterator::key (1)
! 106: meal 1 => dinner
! 107: --> EnglishMealIterator::next (1)
! 108: --> EnglishMealIterator::valid (2)
! 109: --> EnglishMealIterator::current (2)
! 110: --> EnglishMealIterator::key (2)
! 111: meal 2 => tea
! 112: --> EnglishMealIterator::next (2)
! 113: --> EnglishMealIterator::valid (3)
! 114:
! 115: -----( A3: )-----
! 116: --> EnglishMealIterator::rewind (0)
! 117: --> EnglishMealIterator::valid (0)
! 118: --> EnglishMealIterator::current (0)
! 119: --> EnglishMealIterator::key (0)
! 120: meal 0 => breakfast
! 121: --> EnglishMealIterator::next (0)
! 122: --> EnglishMealIterator::valid (1)
! 123: --> EnglishMealIterator::current (1)
! 124: --> EnglishMealIterator::key (1)
! 125: meal 1 => dinner
! 126: --> EnglishMealIterator::next (1)
! 127: --> EnglishMealIterator::valid (2)
! 128: --> EnglishMealIterator::current (2)
! 129: --> EnglishMealIterator::key (2)
! 130: meal 2 => tea
! 131: --> EnglishMealIterator::next (2)
! 132: --> EnglishMealIterator::valid (3)
! 133: ===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>