Annotation of embedaddon/php/ext/spl/tests/iterator_034.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: SPL: RecursiveIteratorIterator and break deep
3: --FILE--
4: <?php
5:
6: class MyRecursiveArrayIterator extends RecursiveArrayIterator
7: {
8: function valid()
9: {
10: if (!parent::valid())
11: {
12: echo __METHOD__ . "() = false\n";
13: return false;
14: }
15: else
16: {
17: return true;
18: }
19: }
20:
21: function getChildren()
22: {
23: echo __METHOD__ . "()\n";
24: return parent::getChildren();
25: }
26:
27: function rewind()
28: {
29: echo __METHOD__ . "()\n";
30: parent::rewind();
31: }
32: }
33:
34: class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator
35: {
36: private $max_depth;
37: private $over = 0;
38:
39: function __construct($it, $max_depth)
40: {
41: $this->max_depth = $max_depth;
42: parent::__construct($it);
43: }
44:
45: function rewind()
46: {
47: echo __METHOD__ . "() - BEGIN\n";
48: parent::rewind();
49: echo __METHOD__ . "() - DONE\n";
50: }
51:
52: function valid()
53: {
54: echo __METHOD__ . "()\n";
55: return parent::valid();
56: }
57:
58: function current()
59: {
60: echo __METHOD__ . "()\n";
61: return parent::current();
62: }
63:
64: function key()
65: {
66: echo __METHOD__ . "()\n";
67: return parent::key();
68: }
69:
70: function next()
71: {
72: echo __METHOD__ . "()\n";
73: parent::next();
74: }
75:
76: function callHasChildren()
77: {
78: $has = parent::callHasChildren();
79: $res = $this->getDepth() < $this->max_depth && $has;
80: echo __METHOD__ . "(".$this->getDepth().") = ".($res?"yes":"no")."/".($has?"yes":"no")."\n";
81: return $res;
82: }
83:
84: function beginChildren()
85: {
86: echo __METHOD__ . "(".$this->getDepth().")\n";
87: parent::beginChildren();
88: }
89:
90: function endChildren()
91: {
92: echo __METHOD__ . "(".$this->getDepth().")\n";
93: parent::endChildren();
94: }
95: }
96:
97: $p = 0;
98: $it = new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"), array("bcba"))), array("ca"), "d")), 2);
99: foreach($it as $k=>$v)
100: {
101: if (is_array($v)) $v = join('',$v);
102: echo "$k=>$v\n";
103: if ($p++ == 5)
104: {
105: echo "===BREAK===\n";
106: break;
107: }
108: }
109:
110: echo "===FOREND===\n";
111:
112: $it->rewind();
113:
114: echo "===CHECK===\n";
115:
116: var_dump($it->valid());
117: var_dump($it->current() == "a");
118:
119: ?>
120: ===DONE===
121: <?php exit(0); ?>
122: --EXPECT--
123: RecursiveArrayIteratorIterator::rewind() - BEGIN
124: MyRecursiveArrayIterator::rewind()
125: RecursiveArrayIteratorIterator::callHasChildren(0) = no/no
126: RecursiveArrayIteratorIterator::rewind() - DONE
127: RecursiveArrayIteratorIterator::valid()
128: RecursiveArrayIteratorIterator::current()
129: RecursiveArrayIteratorIterator::key()
130: 0=>a
131: RecursiveArrayIteratorIterator::next()
132: RecursiveArrayIteratorIterator::callHasChildren(0) = yes/yes
133: MyRecursiveArrayIterator::getChildren()
134: MyRecursiveArrayIterator::rewind()
135: RecursiveArrayIteratorIterator::beginChildren(1)
136: RecursiveArrayIteratorIterator::callHasChildren(1) = no/no
137: RecursiveArrayIteratorIterator::valid()
138: RecursiveArrayIteratorIterator::current()
139: RecursiveArrayIteratorIterator::key()
140: 0=>ba
141: RecursiveArrayIteratorIterator::next()
142: RecursiveArrayIteratorIterator::callHasChildren(1) = yes/yes
143: MyRecursiveArrayIterator::getChildren()
144: MyRecursiveArrayIterator::rewind()
145: RecursiveArrayIteratorIterator::beginChildren(2)
146: RecursiveArrayIteratorIterator::callHasChildren(2) = no/no
147: RecursiveArrayIteratorIterator::valid()
148: RecursiveArrayIteratorIterator::current()
149: RecursiveArrayIteratorIterator::key()
150: 0=>bba
151: RecursiveArrayIteratorIterator::next()
152: RecursiveArrayIteratorIterator::callHasChildren(2) = no/no
153: RecursiveArrayIteratorIterator::valid()
154: RecursiveArrayIteratorIterator::current()
155: RecursiveArrayIteratorIterator::key()
156: 1=>bbb
157: RecursiveArrayIteratorIterator::next()
158: MyRecursiveArrayIterator::valid() = false
159: RecursiveArrayIteratorIterator::endChildren(2)
160: RecursiveArrayIteratorIterator::callHasChildren(1) = yes/yes
161: MyRecursiveArrayIterator::getChildren()
162: MyRecursiveArrayIterator::rewind()
163: RecursiveArrayIteratorIterator::beginChildren(2)
164: RecursiveArrayIteratorIterator::callHasChildren(2) = no/yes
165: RecursiveArrayIteratorIterator::valid()
166: RecursiveArrayIteratorIterator::current()
167: RecursiveArrayIteratorIterator::key()
168: 0=>bcaa
169: RecursiveArrayIteratorIterator::next()
170: RecursiveArrayIteratorIterator::callHasChildren(2) = no/yes
171: RecursiveArrayIteratorIterator::valid()
172: RecursiveArrayIteratorIterator::current()
173: RecursiveArrayIteratorIterator::key()
174: 1=>bcba
175: ===BREAK===
176: ===FOREND===
177: RecursiveArrayIteratorIterator::rewind() - BEGIN
178: RecursiveArrayIteratorIterator::endChildren(1)
179: RecursiveArrayIteratorIterator::endChildren(0)
180: MyRecursiveArrayIterator::rewind()
181: RecursiveArrayIteratorIterator::callHasChildren(0) = no/no
182: RecursiveArrayIteratorIterator::rewind() - DONE
183: ===CHECK===
184: RecursiveArrayIteratorIterator::valid()
185: bool(true)
186: RecursiveArrayIteratorIterator::current()
187: bool(true)
188: ===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>