php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #70510 Variables defined by a cycle are not isolated and cause side effects
Submitted: 2015-09-16 10:28 UTC Modified: 2015-09-16 17:56 UTC
From: mumu at seznam dot cz Assigned:
Status: Not a bug Package: Variables related
PHP Version: 7.0.0RC2 OS: Windows
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: mumu at seznam dot cz
New email:
PHP Version: OS:

 

 [2015-09-16 10:28 UTC] mumu at seznam dot cz
Description:
------------
The first cycle has $item defined by reference. The second by value. 

The $item keeps being a reference to the (last item of the) array even it is used as by value inside the second cycle.

As such, the two cycles are not properly isolated as would have been expected.

Test script:
---------------
<?php

$list = array(
    'a' => 'x',
    'b' => 'y',
    'c' => 'z',
);

foreach ($list as &$item) {
    $item .= $item;
}

foreach ($list as $key => $item) {
    echo $key . ': ' . $item . "\n";
}

?>

Expected result:
----------------
a: xx
b: yy
c: zz

Actual result:
--------------
a: xx
b: yy
c: yy

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2015-09-16 17:56 UTC] requinix@php.net
-Status: Open +Status: Not a bug
 [2015-09-16 17:56 UTC] requinix@php.net
$item is still a reference to the last item after the first loop ends. When the second begins, it will overwrite $item with values from the array - dump out $list inside the loop and you'll see [c] change to 'xx' and 'yy'.

unste($item) after the first loop to destroy the reference.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Mon May 06 17:01:34 2024 UTC