Bug #71241 [Opn->Csd]: array_replace_recursive sometimes mutates its parameters

From: Date: Thu, 20 Oct 2016 11:27:18 +0000
Subject: Bug #71241 [Opn->Csd]: array_replace_recursive sometimes mutates its parameters
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-204934@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=71241&edit=1

 ID:                 71241
 Updated by:         nikic@php.net
 Reported by:        as@php.net
 Summary:            array_replace_recursive sometimes mutates its
                     parameters
-Status:             Open
+Status:             Closed
 Type:               Bug
 Package:            Variables related
 PHP Version:        7.0.1
 Block user comment: N
 Private report:     N

 New Comment:

Automatic comment on behalf of as
Revision: http://git.php.net/?p=php-src.git;a=commit;h=55d17662cb61bc29f443276b0cd50b3a62f91acc
Log: Fix bug #71241: array_replace_recursive mutates ref params


Previous Comments:
------------------------------------------------------------------------
[2016-09-01 16:12:22] nikic@php.net

@laruence: But isn't array_replace_recursive() supposed to return a new array while leaving the
original arguments alone?

A more accurate version of your example would be

<?php
$one = [1];
$arr1 = ['k' => &$one];
$result = [];
$result['k'] = $arr1['k'];
$result['k'] = 2;

In which case $one would remain unchanged.

Imho this is a bug in the PHP 7 implementation and it should instead return the PHP 5 result.

------------------------------------------------------------------------
[2016-01-26 22:46:40] rasmus@php.net

Re-opened. This does seem like a real bug in array_merge_recursive()

------------------------------------------------------------------------
[2016-01-11 18:17:14] as@php.net

Thanks for checking it out laruence. In that case, is array_merge_recursive buggy? It
exhibits the old behavior: https://3v4l.org/NSa9S

There is also a related oddity illustrated here https://3v4l.org/sYutE which again only seems to affect
array_replace_recursive.

I can open separate bugs if that's easier to track, but I think it's all the same root
issue.

------------------------------------------------------------------------
[2015-12-30 03:01:15] laruence@php.net

close as not a bug.

------------------------------------------------------------------------
[2015-12-30 03:00:40] laruence@php.net

the new behavior is more correct, $arr1['k'] is a reference:

it behavior consistently with :

<?php
$one = [1];
$arr1 = ['k' => &$one];
$arr1['k'] = 2;

var_dump($one); //output 2

so, I think no bug here. 

thanks

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=71241


--
Edit this bug report at https://bugs.php.net/bug.php?id=71241&edit=1


Thread (8 messages)

« previous php.bugs (#204934) next »