Return to foreachLoopIteratorAggregate.003.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / lang |
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===