ID: 27395
Updated by: [EMAIL PROTECTED]
Reported By: jamesn at tocquigny dot com
Status: Assigned
-Bug Type: Zend Engine 2 problem
+Bug Type: Scripting Engine problem
-Operating System: redhat linux
+Operating System: *
-PHP Version: 4.3.4
+PHP Version: 4CVS, 5CVS (2004-02-25
Assigned To: zeev
New Comment:
Here's a bit better test script:
<?php
function theFunction($arg) {
$arg[0] = 2;
}
$arr1 = array (1);
$reference =& $arr1[0];
var_dump($reference);
var_dump($arr1);
theFunction($arr1);
var_dump($reference);
var_dump($arr1);
?>
Previous Comments:
------------------------------------------------------------------------
[2004-02-25 13:19:31] [EMAIL PROTECTED]
It's indeed a perfectly valid bug. Assigning to Zeev as he's the engine
guru.
------------------------------------------------------------------------
[2004-02-25 13:12:32] [EMAIL PROTECTED]
RTFM:
http://www.php.net/manual/en/language.references.whatdo.php
------------------------------------------------------------------------
[2004-02-25 12:58:11] jamesn at tocquigny dot com
further:
removing $reference =& $array[0];
from the code causes the array to be passed by value...this is the bug
i'm concerned about.
------------------------------------------------------------------------
[2004-02-25 12:56:51] jamesn at tocquigny dot com
in response to papercrane, no i didn't mean
function theFunction(&$array)
(this would pass by reference...by default php is doing this)
By flagging my bug as bogus are you stating the proper behavior is to
always pass by reference? (Which isn't proper at all IMO nor that of
coworkers or anyone that's worked w/ c/c++)
------------------------------------------------------------------------
[2004-02-25 12:02:02] jamesn at tocquigny dot com
Description:
------------
There appears to be a problem with php that doesn't allow arrays to be
passed by value. The fix appears to be something similar to:
http://bugs.php.net/bug.php?id=6417
if (PZVAL_IS_REF(*p))
{
SEPARATE_ZVAL(p);
} else {
zval_add_ref(p);
}
It would appear that that logic is missing in one place or another. I
could not track it down myself. Code similar to this appears to be
copy/pasted in various places.
Reproduce code:
---------------
$array = array(1);
// This line makes the call to theFunction() act as if passed by ref.?
$reference =& $array[0];
echo $array[0], '<br>';
theFunction($array);
echo $array[0], '<br>';
function theFunction($array) {
$array[0] = 2;
}
Expected result:
----------------
you should get 1 and 1
Actual result:
--------------
instead you get 1 and 2!
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=27395&edit=1