Annotation of embedaddon/php/tests/classes/iterators_001.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: ZE2 iterators and foreach
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->num = 0;
15: $this->obj = $obj;
16: }
17: function rewind() {
18: }
19: function valid() {
20: $more = $this->num < $this->obj->max;
21: echo __METHOD__ . ' = ' .($more ? 'true' : 'false') . "\n";
22: return $more;
23: }
24: function current() {
25: echo __METHOD__ . "\n";
26: return $this->num;
27: }
28: function next() {
29: echo __METHOD__ . "\n";
30: $this->num++;
31: }
32: function key() {
33: echo __METHOD__ . "\n";
34: switch($this->num) {
35: case 0: return "1st";
36: case 1: return "2nd";
37: case 2: return "3rd";
38: default: return "???";
39: }
40: }
41: }
42:
43: class c implements IteratorAggregate {
44:
45: public $max = 3;
46:
47: function getIterator() {
48: echo __METHOD__ . "\n";
49: return new c_iter($this);
50: }
51: }
52:
53: echo "===Array===\n";
54:
55: $a = array(0,1,2);
56: foreach($a as $v) {
57: echo "array:$v\n";
58: }
59:
60: echo "===Manual===\n";
61: $t = new c();
62: for ($iter = $t->getIterator(); $iter->valid(); $iter->next()) {
63: echo $iter->current() . "\n";
64: }
65:
66: echo "===foreach/std===\n";
67: foreach($t as $v) {
68: echo "object:$v\n";
69: }
70:
71: echo "===foreach/rec===\n";
72: foreach($t as $v) {
73: foreach($t as $w) {
74: echo "double:$v:$w\n";
75: }
76: }
77:
78: echo "===foreach/key===\n";
79: foreach($t as $i => $v) {
80: echo "object:$i=>$v\n";
81: }
82:
83: print "Done\n";
84: exit(0);
85: ?>
86: --EXPECT--
87: ===Array===
88: array:0
89: array:1
90: array:2
91: ===Manual===
92: c::getIterator
93: c_iter::__construct
94: c_iter::valid = true
95: c_iter::current
96: 0
97: c_iter::next
98: c_iter::valid = true
99: c_iter::current
100: 1
101: c_iter::next
102: c_iter::valid = true
103: c_iter::current
104: 2
105: c_iter::next
106: c_iter::valid = false
107: ===foreach/std===
108: c::getIterator
109: c_iter::__construct
110: c_iter::valid = true
111: c_iter::current
112: object:0
113: c_iter::next
114: c_iter::valid = true
115: c_iter::current
116: object:1
117: c_iter::next
118: c_iter::valid = true
119: c_iter::current
120: object:2
121: c_iter::next
122: c_iter::valid = false
123: ===foreach/rec===
124: c::getIterator
125: c_iter::__construct
126: c_iter::valid = true
127: c_iter::current
128: c::getIterator
129: c_iter::__construct
130: c_iter::valid = true
131: c_iter::current
132: double:0:0
133: c_iter::next
134: c_iter::valid = true
135: c_iter::current
136: double:0:1
137: c_iter::next
138: c_iter::valid = true
139: c_iter::current
140: double:0:2
141: c_iter::next
142: c_iter::valid = false
143: c_iter::next
144: c_iter::valid = true
145: c_iter::current
146: c::getIterator
147: c_iter::__construct
148: c_iter::valid = true
149: c_iter::current
150: double:1:0
151: c_iter::next
152: c_iter::valid = true
153: c_iter::current
154: double:1:1
155: c_iter::next
156: c_iter::valid = true
157: c_iter::current
158: double:1:2
159: c_iter::next
160: c_iter::valid = false
161: c_iter::next
162: c_iter::valid = true
163: c_iter::current
164: c::getIterator
165: c_iter::__construct
166: c_iter::valid = true
167: c_iter::current
168: double:2:0
169: c_iter::next
170: c_iter::valid = true
171: c_iter::current
172: double:2:1
173: c_iter::next
174: c_iter::valid = true
175: c_iter::current
176: double:2:2
177: c_iter::next
178: c_iter::valid = false
179: c_iter::next
180: c_iter::valid = false
181: ===foreach/key===
182: c::getIterator
183: c_iter::__construct
184: c_iter::valid = true
185: c_iter::current
186: c_iter::key
187: object:1st=>0
188: c_iter::next
189: c_iter::valid = true
190: c_iter::current
191: c_iter::key
192: object:2nd=>1
193: c_iter::next
194: c_iter::valid = true
195: c_iter::current
196: c_iter::key
197: object:3rd=>2
198: c_iter::next
199: c_iter::valid = false
200: Done
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>