#46283 [Opn->Fbk]: array_merge_recursive() Warning recursion detected in...
| From: | lbarnaud@php.net | Date: | Wed, 26 Nov 2008 02:41:32 +0000 |
| Subject: | #46283 [Opn->Fbk]: array_merge_recursive() Warning recursion detected in... | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-131332@lists.php.net to get a copy of this message | ||
ID: 46283
Updated by: lbarnaud@php.net
Reported By: name at email dot com
-Status: Open
+Status: Feedback
Bug Type: Arrays related
Operating System: *
PHP Version: 5CVS-2008-11-17
New Comment:
I can't reproduce with 5.3CVS (no warnings).
The weird output is caused by two null bytes and the class name added
to private properties. You get the same output when casting a class to
an array.
Previous Comments:
------------------------------------------------------------------------
[2008-11-17 13:42:33] name at email dot com
@jani
PHP Version 5.2.7RC4-dev
Build Date Nov 17 2008 11:39:11
array(1) {
["name"]=>
array(1) {
["�A�variable"]=>
array(2) {
[0]=>
string(3) "foo"
[1]=>
string(3) "foo"
}
}
}
------------------------------------------------------------------------
[2008-11-12 13:10:31] jani@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php5.2-latest.tar.gz
For Windows:
http://windows.php.net/snapshots/
------------------------------------------------------------------------
[2008-10-29 15:18:38] name at email dot com
@jani
1. passing two arrays.
2. they both contain a reference to an object.
3. i expect the function to preserve the structure of the object.
4. notice: ["�A�variable"] <-- whats that?
------------------------------------------------------------------------
[2008-10-26 19:19:46] jani@php.net
What's the problem here? You're passing an object to a function
expecting arrays and think it will work..?
------------------------------------------------------------------------
[2008-10-12 22:14:15] name at email dot com
Description:
------------
Calling array_merge_recursive() produces an unclear warning ("recursion
detected in"...) and seems to be breaking the script. The above happens
if two conditions are met:
1. there is a private/protected data member in the object (see code).
2. the merged arrays contain at least one same string as key.
* please note: following code reproduces this problem on the latest
snaps of both 5.2.6 and 5.3
Reproduce code:
---------------
class A {
private $variable;
public function __construct() {
$this->variable = 'foo';
}
}
$x = new A;
$b = array_merge_recursive(array("name"=>$x),array("name"=>$x));
var_dump($b);
Expected result:
----------------
see 'Actual result' below...
Actual result:
--------------
array(1) {
["name"]=>
array(1) {
["�A�variable"]=>
array(2) {
[0]=>
string(3) "foo"
[1]=>
string(3) "foo"
}
}
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=46283&edit=1