Edit report at https://bugs.php.net/bug.php?id=62901&edit=1
ID: 62901
User updated by: david at grudl dot com
Reported by: david at grudl dot com
Summary: foreach unexpectedly advances the internal array
pointer
Status: Not a bug
Type: Bug
Package: Variables related
PHP Version: 5.4.6
Block user comment: N
Private report: N
New Comment:
The point is: the iteration is not started on $this->arr, but it is started on
array returned from method getArr().
Foreach resets internal array pointer of completely different array.
Previous Comments:
------------------------------------------------------------------------
[2012-08-24 02:51:39] [email protected]
"When foreach first starts executing, the internal array pointer is
automatically
reset to the first element of the array. " that means foreach change the
internal
potinter of an array.
http://us3.php.net/manual/en/control-structures.foreach.php
------------------------------------------------------------------------
[2012-08-24 01:27:07] david at grudl dot com
Maybe this is not a bug, but i have read documentations carefully and there is
nothing about this. Could you send a link?
And one question: why function reset() uses reference, if there is no need to
use reference to advance internal array pointer?
------------------------------------------------------------------------
[2012-08-23 15:37:32] [email protected]
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php
please see the note at : http://us3.php.net/manual/en/control-
structures.foreach.php
------------------------------------------------------------------------
[2012-08-23 02:08:58] david at grudl dot com
Description:
------------
Foreach unexpectedly advances the internal array pointer, although array is
returned by function without reference.
Test script:
---------------
<?php
class Test
{
function run()
{
$this->arr = array('item');
var_dump(key($this->arr)); // dumps 0
// this unexpectedly advances the internal array pointer
foreach ($this->getArr() as $v) {}
var_dump(key($this->arr)); // dumps NULL
}
function getArr()
{
// is NOT returned by reference
return $this->arr;
}
}
$test = new Test;
$test->run();
Expected result:
----------------
It dumps "0" in second time too.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=62901&edit=1