![]() ![]() | ![]() |
1.1 misho 1: --TEST--
1.1.1.2 ! misho 2: SPL: AppendIterator::append() rewinds when necessary
1.1 misho 3: --FILE--
4: <?php
5:
6: class MyArrayIterator extends ArrayIterator
7: {
8: function rewind()
9: {
10: echo __METHOD__ . "\n";
11: parent::rewind();
12: }
13: }
14:
15: $it = new MyArrayIterator(array(1,2));
16:
17: foreach($it as $k=>$v)
18: {
19: echo "$k=>$v\n";
20: }
21:
22: class MyAppendIterator extends AppendIterator
23: {
24: function __construct()
25: {
26: echo __METHOD__ . "\n";
27: }
28:
29: function rewind()
30: {
31: echo __METHOD__ . "\n";
32: parent::rewind();
33: }
34:
35: function valid()
36: {
37: echo __METHOD__ . "\n";
38: return parent::valid();
39: }
40:
41: function append(Iterator $what)
42: {
43: echo __METHOD__ . "\n";
44: parent::append($what);
45: }
46:
47: function parent__construct()
48: {
49: parent::__construct();
50: }
51: }
52:
53: $ap = new MyAppendIterator;
54:
55: try
56: {
57: $ap->append($it);
58: }
59: catch(LogicException $e)
60: {
61: echo $e->getMessage() . "\n";
62: }
63:
64: $ap->parent__construct();
65:
66: try
67: {
68: $ap->parent__construct($it);
69: }
70: catch(BadMethodCallException $e)
71: {
72: echo $e->getMessage() . "\n";
73: }
74:
75: $ap->append($it);
76: $ap->append($it);
77: $ap->append($it);
78:
79: foreach($ap as $k=>$v)
80: {
81: echo "$k=>$v\n";
82: }
83:
84: ?>
85: ===DONE===
86: <?php exit(0); ?>
87: --EXPECT--
88: MyArrayIterator::rewind
89: 0=>1
90: 1=>2
91: MyAppendIterator::__construct
92: MyAppendIterator::append
93: The object is in an invalid state as the parent constructor was not called
94: AppendIterator::getIterator() must be called exactly once per instance
95: MyAppendIterator::append
96: MyArrayIterator::rewind
97: MyAppendIterator::append
98: MyAppendIterator::append
99: MyAppendIterator::rewind
100: MyArrayIterator::rewind
101: MyAppendIterator::valid
102: 0=>1
103: MyAppendIterator::valid
104: 1=>2
105: MyArrayIterator::rewind
106: MyAppendIterator::valid
107: 0=>1
108: MyAppendIterator::valid
109: 1=>2
110: MyArrayIterator::rewind
111: MyAppendIterator::valid
112: 0=>1
113: MyAppendIterator::valid
114: 1=>2
115: MyAppendIterator::valid
116: ===DONE===