Edit report at http://bugs.php.net/bug.php?id=52133&edit=1
ID: 52133
User updated by: bschussek at gmail dot com
Reported by: bschussek at gmail dot com
Summary: Functions cannot return an argument passed by
reference as reference
Status: Bogus
Type: Bug
Package: Scripting Engine problem
Operating System: Linux Ubuntu 10.04
PHP Version: 5.3.2
Assigned To: dmitry
New Comment:
Thanks, that's right. Maybe this error message should be improved then?
"Strict standards: Only variables should be assigned by reference"
Obviously (which I didn't know, due to the error message) it is possible
to
assign functions by reference, but only if they are marked to return a
reference.
Previous Comments:
------------------------------------------------------------------------
[2010-06-23 09:31:02] [email protected]
You forgot "&" in assignment.
$c =& ref($b);
------------------------------------------------------------------------
[2010-06-23 00:51:13] bschussek at gmail dot com
In my last comment I dumped first $b and then $c, so the output hasn't
changed
from PHP 5.3.2.
------------------------------------------------------------------------
[2010-06-23 00:48:36] bschussek at gmail dot com
Sorry, but the test script produces still the wrong output for me.
$ php -v
PHP 5.3.3-dev (cli) (built: Jun 23 2010 00:45:57)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans
$ php test.php
string(6) "foobar"
string(6) "fozbar"
------------------------------------------------------------------------
[2010-06-23 00:29:01] [email protected]
Please try using this snapshot:
http://snaps.php.net/php5.3-latest.tar.gz
For Windows:
http://windows.php.net/snapshots/
------------------------------------------------------------------------
[2010-06-21 13:56:07] bschussek at gmail dot com
Description:
------------
PHP does not behave as expected when passing arguments by reference into
a
function that are passed out again by reference.
IMO, the below test script should behave equivalently to the following
code
(which produces the expected result):
$b = 'foobar';
$a =& $b;
$c =& $a;
$c[2] = 'z';
var_dump($c);
var_dump($b);
Test script:
---------------
function &ref(&$a)
{
return $a;
}
$b = 'foobar';
$c = ref($b);
$c[2] = 'z';
Expected result:
----------------
string 'fozbar' (length=6)
string 'fozbar' (length=6)
Actual result:
--------------
string 'fozbar' (length=6)
string 'foobar' (length=6)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=52133&edit=1