Annotation of embedaddon/php/tests/classes/iterators_002.phpt, revision 1.1.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>