php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #27923 foreach() with references broken when iterating only over value
Submitted: 2004-04-08 15:20 UTC Modified: 2004-04-23 23:46 UTC
Votes:3
Avg. Score:5.0 ± 0.0
Reproduced:3 of 3 (100.0%)
Same Version:1 (33.3%)
Same OS:2 (66.7%)
From: adam at trachtenberg dot com Assigned: andi (profile)
Status: Closed Package: Scripting Engine problem
PHP Version: 5CVS-2004-04-13 OS: *
Private report: No CVE-ID: None
 [2004-04-08 15:20 UTC] adam at trachtenberg dot com
Description:
------------
In PHP 5, foreach() allows you to iterate over values by 
reference. This does not work when you do foreach($array 
as $value) instead of foreach($array as $key => $value).

I believe this patch fixes the problem, but someone 
should *really* double check it. :)

http://www.trachtenberg.com/patches/
foreach_by_reference.txt

Reproduce code:
---------------
php -r '$array = array(); foreach($array as $value) {)'

Expected result:
----------------
Nothing.

Actual result:
--------------
PHP Fatal error:  Key element cannot be a reference in 
Command line code on line 1

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-04-12 19:31 UTC] sniper@php.net
your example doesn't have any references in it..? (and it works fine when I replace the last ) with } :)

 [2004-04-12 19:40 UTC] adam at trachtenberg dot com
Jesus. Sometimes I reduce the test case too far. :)

$a = array('foo', 'bar');

foreach ($a as &$value) {
    $value = strtoupper($value);
}

print_r($a);

$a should have FOO and BAR, as it works okay if you do:

foreach ($a as $k => &$value) {
    $value = strtoupper($value);
}

But PHP gives an error on the first example w/o my 
patch.

(At least I hope it still does, I need to recompile PHP 
to triple check.)
 [2004-04-12 19:43 UTC] sniper@php.net
See also bug #27964 (a bit different case but same errors :)

 [2004-04-23 01:44 UTC] amt@php.net
Any chance of this getting into RC2?
 [2004-04-23 20:42 UTC] amt@php.net
Cannot reproduce on Linux or Mac OS X with snapshots, 
but bug continues to exist on Mac OS X when building 
from CVS.
 [2004-04-23 23:46 UTC] andi@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Nov 08 02:01:28 2024 UTC