Annotation of embedaddon/php/tests/classes/iterators_002.phpt, revision 1.1
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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>