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