Req #49369 [Com]: Change current(), key(), next(), etc. to check for Iterator
Edit report at https://bugs.php.net/bug.php?id=49369&edit=1 ID: 49369 Comment by: le...@php.net Reported by:admin at ifyouwantblood dot de Summary:Change current(), key(), next(), etc. to check for Iterator Status: Open Type: Feature/Change Request Package:Arrays related Operating System: * PHP Version:* Block user comment: N Private report: N New Comment: Added bug #63678 as a duplicate. Previous Comments: [2012-11-16 04:35:52] le...@php.net Sorry, I misunderstood the bug. Silly me. Ignore my above comments. [2012-11-16 04:33:26] le...@php.net Also, calling `current($i)` gets the current value of the object `$i` which is the array; it doesn't call `$i->current`. [2012-11-16 04:27:19] le...@php.net I'm not sure this is a php bug. Iterators should be rewound almost 100% of the time before being used, especially when using an array or an object that implements Iterator instead of IteratorAggregate. Maybe the documentation should try to make this better known? [2012-07-01 11:14:30] bugs dot php dot net dot nsp at cvogt dot org As a further note, the current behavior or current() also leaks private fields unlike e.g. http://php.net/manual/en/language.oop5.iterations.php. class Test{ private $field = 5; public $field3 = 6; } $t = new Test; print current($t); Expected result: 6 Actual result: 5 [2009-08-26 10:34:05] admin at ifyouwantblood dot de Description: it would be helpful for chained Iterators, if the default array functions would check if an given object is an instanceof Iterator and react appropriate. thus key() calling object->key(), current() calling object->current() and so on. Reproduce code: --- aarray=$array; } public function key() { return key($this->aarray); } public function current() { return current($this->aarray); } public function valid() { return (current($this->aarray)!==FALSE); } public function next() { next($this->aarray); } public function rewind() { reset($this->aarray); } } $i=new iterator_array(Array(1,2)); var_dump(current($i)); var_dump(key($i)); next($i); var_dump($current($i)); var_dump(key($i)); Expected result: int(1) int(0) int(2) int(1) Actual result: -- array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) } string(9) "�*�aarray" bool(false) NULL -- Edit this bug report at https://bugs.php.net/bug.php?id=49369&edit=1
Req #49369 [Com]: Change current(), key(), next(), etc. to check for Iterator
Edit report at https://bugs.php.net/bug.php?id=49369&edit=1 ID: 49369 Comment by: le...@php.net Reported by:admin at ifyouwantblood dot de Summary:Change current(), key(), next(), etc. to check for Iterator Status: Open Type: Feature/Change Request Package:Arrays related Operating System: * PHP Version:* Block user comment: N Private report: N New Comment: Sorry, I misunderstood the bug. Silly me. Ignore my above comments. Previous Comments: [2012-11-16 04:33:26] le...@php.net Also, calling `current($i)` gets the current value of the object `$i` which is the array; it doesn't call `$i->current`. [2012-11-16 04:27:19] le...@php.net I'm not sure this is a php bug. Iterators should be rewound almost 100% of the time before being used, especially when using an array or an object that implements Iterator instead of IteratorAggregate. Maybe the documentation should try to make this better known? [2012-07-01 11:14:30] bugs dot php dot net dot nsp at cvogt dot org As a further note, the current behavior or current() also leaks private fields unlike e.g. http://php.net/manual/en/language.oop5.iterations.php. class Test{ private $field = 5; public $field3 = 6; } $t = new Test; print current($t); Expected result: 6 Actual result: 5 [2009-08-26 10:34:05] admin at ifyouwantblood dot de Description: it would be helpful for chained Iterators, if the default array functions would check if an given object is an instanceof Iterator and react appropriate. thus key() calling object->key(), current() calling object->current() and so on. Reproduce code: --- aarray=$array; } public function key() { return key($this->aarray); } public function current() { return current($this->aarray); } public function valid() { return (current($this->aarray)!==FALSE); } public function next() { next($this->aarray); } public function rewind() { reset($this->aarray); } } $i=new iterator_array(Array(1,2)); var_dump(current($i)); var_dump(key($i)); next($i); var_dump($current($i)); var_dump(key($i)); Expected result: int(1) int(0) int(2) int(1) Actual result: -- array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) } string(9) "�*�aarray" bool(false) NULL -- Edit this bug report at https://bugs.php.net/bug.php?id=49369&edit=1
Req #49369 [Com]: Change current(), key(), next(), etc. to check for Iterator
Edit report at https://bugs.php.net/bug.php?id=49369&edit=1 ID: 49369 Comment by: le...@php.net Reported by:admin at ifyouwantblood dot de Summary:Change current(), key(), next(), etc. to check for Iterator Status: Open Type: Feature/Change Request Package:Arrays related Operating System: * PHP Version:* Block user comment: N Private report: N New Comment: Also, calling `current($i)` gets the current value of the object `$i` which is the array; it doesn't call `$i->current`. Previous Comments: [2012-11-16 04:27:19] le...@php.net I'm not sure this is a php bug. Iterators should be rewound almost 100% of the time before being used, especially when using an array or an object that implements Iterator instead of IteratorAggregate. Maybe the documentation should try to make this better known? [2012-07-01 11:14:30] bugs dot php dot net dot nsp at cvogt dot org As a further note, the current behavior or current() also leaks private fields unlike e.g. http://php.net/manual/en/language.oop5.iterations.php. class Test{ private $field = 5; public $field3 = 6; } $t = new Test; print current($t); Expected result: 6 Actual result: 5 [2009-08-26 10:34:05] admin at ifyouwantblood dot de Description: it would be helpful for chained Iterators, if the default array functions would check if an given object is an instanceof Iterator and react appropriate. thus key() calling object->key(), current() calling object->current() and so on. Reproduce code: --- aarray=$array; } public function key() { return key($this->aarray); } public function current() { return current($this->aarray); } public function valid() { return (current($this->aarray)!==FALSE); } public function next() { next($this->aarray); } public function rewind() { reset($this->aarray); } } $i=new iterator_array(Array(1,2)); var_dump(current($i)); var_dump(key($i)); next($i); var_dump($current($i)); var_dump(key($i)); Expected result: int(1) int(0) int(2) int(1) Actual result: -- array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) } string(9) "�*�aarray" bool(false) NULL -- Edit this bug report at https://bugs.php.net/bug.php?id=49369&edit=1
Req #49369 [Com]: Change current(), key(), next(), etc. to check for Iterator
Edit report at https://bugs.php.net/bug.php?id=49369&edit=1 ID: 49369 Comment by: le...@php.net Reported by:admin at ifyouwantblood dot de Summary:Change current(), key(), next(), etc. to check for Iterator Status: Open Type: Feature/Change Request Package:Arrays related Operating System: * PHP Version:* Block user comment: N Private report: N New Comment: I'm not sure this is a php bug. Iterators should be rewound almost 100% of the time before being used, especially when using an array or an object that implements Iterator instead of IteratorAggregate. Maybe the documentation should try to make this better known? Previous Comments: [2012-07-01 11:14:30] bugs dot php dot net dot nsp at cvogt dot org As a further note, the current behavior or current() also leaks private fields unlike e.g. http://php.net/manual/en/language.oop5.iterations.php. class Test{ private $field = 5; public $field3 = 6; } $t = new Test; print current($t); Expected result: 6 Actual result: 5 [2009-08-26 10:34:05] admin at ifyouwantblood dot de Description: it would be helpful for chained Iterators, if the default array functions would check if an given object is an instanceof Iterator and react appropriate. thus key() calling object->key(), current() calling object->current() and so on. Reproduce code: --- aarray=$array; } public function key() { return key($this->aarray); } public function current() { return current($this->aarray); } public function valid() { return (current($this->aarray)!==FALSE); } public function next() { next($this->aarray); } public function rewind() { reset($this->aarray); } } $i=new iterator_array(Array(1,2)); var_dump(current($i)); var_dump(key($i)); next($i); var_dump($current($i)); var_dump(key($i)); Expected result: int(1) int(0) int(2) int(1) Actual result: -- array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) } string(9) "�*�aarray" bool(false) NULL -- Edit this bug report at https://bugs.php.net/bug.php?id=49369&edit=1
Req #49369 [Com]: Change current(), key(), next(), etc. to check for Iterator
Edit report at https://bugs.php.net/bug.php?id=49369&edit=1 ID: 49369 Comment by: bugs dot php dot net dot nsp at cvogt dot org Reported by:admin at ifyouwantblood dot de Summary:Change current(), key(), next(), etc. to check for Iterator Status: Open Type: Feature/Change Request Package:Arrays related Operating System: * PHP Version:* Block user comment: N Private report: N New Comment: As a further note, the current behavior or current() also leaks private fields unlike e.g. http://php.net/manual/en/language.oop5.iterations.php. class Test{ private $field = 5; public $field3 = 6; } $t = new Test; print current($t); Expected result: 6 Actual result: 5 Previous Comments: [2009-08-26 10:34:05] admin at ifyouwantblood dot de Description: it would be helpful for chained Iterators, if the default array functions would check if an given object is an instanceof Iterator and react appropriate. thus key() calling object->key(), current() calling object->current() and so on. Reproduce code: --- aarray=$array; } public function key() { return key($this->aarray); } public function current() { return current($this->aarray); } public function valid() { return (current($this->aarray)!==FALSE); } public function next() { next($this->aarray); } public function rewind() { reset($this->aarray); } } $i=new iterator_array(Array(1,2)); var_dump(current($i)); var_dump(key($i)); next($i); var_dump($current($i)); var_dump(key($i)); Expected result: int(1) int(0) int(2) int(1) Actual result: -- array(6) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) } string(9) "�*�aarray" bool(false) NULL -- Edit this bug report at https://bugs.php.net/bug.php?id=49369&edit=1