#20993 [Sus->Opn]: Element value changes without asking
| From: | msopacua@php.net | Date: | Wed, 18 Dec 2002 09:25:45 +0000 |
| Subject: | #20993 [Sus->Opn]: Element value changes without asking | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969350327@lists.php.net to get a copy of this message | ||
ID: 20993
Updated by: msopacua@php.net
Reported By: henrik.gebauer@web.de
-Status: Suspended
+Status: Open
-Bug Type: Scripting Engine problem
+Bug Type: Documentation problem
Operating System: Any
PHP Version: 4.0CVS-2002-12-13
New Comment:
We have discussed this issue and it will put a considerable slowdown on
php's performance, to fix this properly.
Therefore this behavior will be documented.
Previous Comments:
------------------------------------------------------------------------
[2002-12-13 14:51:47] moriyoshi@php.net
This bug has a lot to do with the bug reports mentioned below.
http://bugs.php.net/bug.php?id=6417
http://bugs.php.net/bug.php?id=7412
http://bugs.php.net/bug.php?id=15025
As a workaround, you can write as following to avoid this issue.
function theFunction($array) {
$array = unserialize(serialize($array));
$array[0] = 2;
}
------------------------------------------------------------------------
[2002-12-13 12:50:26] moriyoshi@php.net
Verified with 4.2.3
------------------------------------------------------------------------
[2002-12-13 12:42:22] msopacua@php.net
Verified and added testcase to CVS
------------------------------------------------------------------------
[2002-12-13 12:01:33] henrik.gebauer@web.de
I create an array an then a reference to an element of that array.
Then the array is passed to a function (by value!) which changes the
value of the element.
After that, the global array has also another value.
I would expect this behaviour if I passed the array by reference but I
do not.
<?php
$array = array(1);
$reference =& $array[0];
echo $array[0], '<br>';
theFunction($array);
echo $array[0], '<br>';
function theFunction($array) {
$array[0] = 2;
}
?>
------------------------------------------------------------------------
[2002-12-13 12:00:37] henrik.gebauer@web.de
I create an array an then a reference to an element of that array.
Then the array is passed to a function (by value!) which changes the
value of the element.
After that, the global array has also another value.
I would expect this behaviour if I passed the array by reference but I
did not.
<?php
$array = array(1);
$reference =& $array[0];
echo $array[0], '<br>';
theFunction($array);
echo $array[0], '<br>';
function theFunction($array) {
$array[0] = 2;
}
?>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=20993&edit=1