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