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:
---------------
<?php
class iterator_array implements Iterator
{
protected $aarray;
public function __construct($array)
{
$this->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