ID: 27395
Updated by: [EMAIL PROTECTED]
Reported By: jamesn at tocquigny dot com
Status: Assigned
Bug Type: Scripting Engine problem
Operating System: *
PHP Version: 4CVS, 5CVS (2004-02-25
Assigned To: zeev
New Comment:
Wrong test, this was the one:
<?php
function theFunction($arg) {
$arg[0] = 2;
}
// Reference on array index
$arr1 = array (1);
$reference1 =& $arr1[0];
var_dump($reference1);
var_dump($arr1);
theFunction($arr1);
var_dump($reference1);
var_dump($arr1);
echo "--------\n";
// Reference on array
$arr2 = array (1);
$reference2 =& $arr2;
var_dump($reference2);
var_dump($arr2);
theFunction($arr2);
var_dump($reference2);
var_dump($arr2);
?>
Previous Comments:
------------------------------------------------------------------------
[2004-02-25 13:26:08] [EMAIL PROTECTED]
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);
?>
------------------------------------------------------------------------
[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