Bug #66256 [Asn->NoF]: Generator::current() does not support return value by reference
Edit report at https://bugs.php.net/bug.php?id=66256&edit=1
ID: 66256
Updated by: nikic@php.net
Reported by: edmond at inbox dot ru
Summary: Generator::current() does not support return value
by reference
-Status: Assigned
+Status: No Feedback
Type: Bug
Package: Scripting Engine problem
Operating System: Windows 7 64
PHP Version: 5.5Git-2013-12-10 (snap)
Assigned To: nikic
Block user comment: N
Private report: N
New Comment:
Marking this as Won't Fix, as I don't this is a useful feature and it would add a
performance overhead for all usages. ArrayIterator, which is the only other iterator that supports
by-ref iteration in foreach (as far as I know), also has ::current() returning by-value.
Previous Comments:
------------------------------------------------------------------------
[2014-08-08 11:04:26] elliot at aanet dot com dot au
I assume this was never fixed.
Is there any known workaround?
------------------------------------------------------------------------
[2013-12-10 17:33:15] edmond at inbox dot ru
Description:
------------
Generator::current() does not support return value by reference.
I note foreach operator works fine with yield result which passed by reference.
The code below works normal:
function &my_test(&$array)
{
foreach($array as $key => &$value)
{
yield $key => $value;
}
}
$array = ['x1' => 1,'x2' => 2, 'x3' => 3,'x4' =>
4];
foreach(my_test($array) as $key => &$value)
{
$value = $value + 10;
echo "$key => $value\n";
}
print_r($array);
But when I use Generator::current() I get a different result.
On the other hand Generator::current() does not have to return value by reference. But there must be
another way to do it.
Test script:
---------------
function &my_test(&$array)
{
foreach($array as $key => &$value)
{
yield $key => $value;
}
}
$array = ['x1' => 1,'x2' => 2, 'x3' =>
3,'x4' => 4];
$generator = my_test($array);
while($generator->valid())
{
$value = $generator->current();
$key = $generator->key();
$value = $value + 10;
echo "$key => $value\n";
$generator->next();
}
print_r($array);
Expected result:
----------------
x1 => 11
x2 => 12
x3 => 13
x4 => 14
Array
(
[x1] => 11
[x2] => 12
[x3] => 13
[x4] => 14
)
Actual result:
--------------
x1 => 11
x2 => 12
x3 => 13
x4 => 14
Array
(
[x1] => 1
[x2] => 2
[x3] => 3
[x4] => 4
)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=66256&edit=1
Thread (5 messages)