File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / lang / foreachLoopIterator.001.phpt
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:48:06 2012 UTC (12 years, 4 months ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_29p0, v5_4_29, v5_4_20p0, v5_4_20, v5_4_17p0, v5_4_17, v5_3_10, HEAD
php

    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>