Return to foreachLoopIteratorAggregate.004.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / tests / lang |
1.1 ! misho 1: --TEST-- ! 2: Duplicate of zend test tests/classes/iterators_002.phpt without expected output from destructor ! 3: --FILE-- ! 4: <?php ! 5: class c_iter implements Iterator { ! 6: ! 7: private $obj; ! 8: private $num = 0; ! 9: ! 10: function __construct($obj) { ! 11: echo __METHOD__ . "\n"; ! 12: $this->obj = $obj; ! 13: } ! 14: function rewind() { ! 15: echo __METHOD__ . "\n"; ! 16: $this->num = 0; ! 17: } ! 18: function valid() { ! 19: $more = $this->num < $this->obj->max; ! 20: echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n"; ! 21: return $more; ! 22: } ! 23: function current() { ! 24: echo __METHOD__ . "\n"; ! 25: return $this->num; ! 26: } ! 27: function next() { ! 28: echo __METHOD__ . "\n"; ! 29: $this->num++; ! 30: } ! 31: function key() { ! 32: echo __METHOD__ . "\n"; ! 33: switch($this->num) { ! 34: case 0: return "1st"; ! 35: case 1: return "2nd"; ! 36: case 2: return "3rd"; ! 37: default: return "???"; ! 38: } ! 39: } ! 40: function __destruct() { ! 41: } ! 42: } ! 43: ! 44: class c implements IteratorAggregate { ! 45: ! 46: public $max = 3; ! 47: ! 48: function getIterator() { ! 49: echo __METHOD__ . "\n"; ! 50: return new c_iter($this); ! 51: } ! 52: function __destruct() { ! 53: } ! 54: } ! 55: ! 56: $t = new c(); ! 57: ! 58: foreach($t as $k => $v) { ! 59: foreach($t as $w) { ! 60: echo "double:$v:$w\n"; ! 61: break; ! 62: } ! 63: } ! 64: ! 65: unset($t); ! 66: ! 67: ?> ! 68: ===DONE=== ! 69: --EXPECT-- ! 70: c::getIterator ! 71: c_iter::__construct ! 72: c_iter::rewind ! 73: c_iter::valid = true ! 74: c_iter::current ! 75: c_iter::key ! 76: c::getIterator ! 77: c_iter::__construct ! 78: c_iter::rewind ! 79: c_iter::valid = true ! 80: c_iter::current ! 81: double:0:0 ! 82: c_iter::next ! 83: c_iter::valid = true ! 84: c_iter::current ! 85: c_iter::key ! 86: c::getIterator ! 87: c_iter::__construct ! 88: c_iter::rewind ! 89: c_iter::valid = true ! 90: c_iter::current ! 91: double:1:0 ! 92: c_iter::next ! 93: c_iter::valid = true ! 94: c_iter::current ! 95: c_iter::key ! 96: c::getIterator ! 97: c_iter::__construct ! 98: c_iter::rewind ! 99: c_iter::valid = true ! 100: c_iter::current ! 101: double:2:0 ! 102: c_iter::next ! 103: c_iter::valid = false ! 104: ===DONE===