ID: 37141
Updated by: [EMAIL PROTECTED]
Reported By: jazfresh at hotmail dot com
-Status: Open
+Status: Bogus
Bug Type: *General Issues
Operating System: Linux Fedora Core 5
PHP Version: 5.1.2
New Comment:
($var = "value") is an expression, not a variable.
And expressions cannot be referenced.
Previous Comments:
------------------------------------------------------------------------
[2006-04-20 08:43:10] jazfresh at hotmail dot com
I did this, and got the message:
PHP Strict Standards: Only variables should be passed by reference in
/path/to/example.php on line 10
However this does not explain the problem, because it is a variable
that is being passed, not a constant. In my reproduce code, the
function is being called with the variable "$woz". The only difference
is that the variable is initialized in the function call, as opposed to
outside it.
I would hazard a guess that this is going to break a lot of people's
code, because they do things like:
exec('/bin/ls -l', $output = array(), $result);
which will always return an empty array.
------------------------------------------------------------------------
[2006-04-20 08:25:06] [EMAIL PROTECTED]
Add error_reporting(E_ALL|E_STRICT) to the beginning of your code and
you'll see the explanation.
------------------------------------------------------------------------
[2006-04-20 04:50:40] jazfresh at hotmail dot com
Description:
------------
If a variable is initialized inside a function call (e.g. foo($bar,
$baz=3) ) and that parameter is a reference, then the variable cannot
be altered by the function. It works ok if the variable is initialized
outside the function call.
This bug exists in PHP 5.1.2. It does not exist in 5.0.3. I checked the
changelogs and release notes for all versions inbetween, but I did not
find anything that indicated that the language changed in this way.
Reproduce code:
---------------
function foo(&$bar) {
echo "Parameter is $bar\n";
$bar = "baz";
}
foo($woz = "abc");
echo "Woz is $woz\n";
$bliz = "abc";
foo($bliz);
echo "Bliz is $bliz\n";
Expected result:
----------------
Parameter is abc
Woz is baz
Parameter is abc
Bliz is baz
Actual result:
--------------
Parameter is abc
Woz is abc
Parameter is abc
Bliz is baz
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=37141&edit=1