From: php-bugs-2005 at ryandesign dot com
Operating system: N/A
PHP version: 4.4.0
PHP Bug Type: Unknown/Other Function
Bug description: "Only variable references should be returned by reference" if
I return nothing
Description:
------------
Hi. After upgrading from PHP 4.3.11 to 4.4.0 I get the
famous "Only variable references should be returned by
reference" notice in one of my projects. The function in
question returns by reference, but only needs to do this
sometimes. Other times, it returns nothing at all, because
the caller does not need a return value. In these latter
cases, PHP produces the notice as of 4.4.0.
This surprised me because it's perfectly fine to have a
normal return-by-copy function that does not return
anything. So why not a return-by-reference function?
I couldn't find any documentation that if your function
returns by reference, then you must always return something.
In my particular case I can rewrite the function so that it
always returns something, even when the caller has no use
for it. I just wasn't sure if the notice in this case was
intended, and if so, why.
If the behavior is intended, then the documentation should
reflect this.
Reproduce code:
---------------
error_reporting(E_ALL);
function &foo_by_reference_with_return() {
echo __FUNCTION__ . "<br />\n";
return $GLOBALS['bar'];
}
function &foo_by_reference_without_return() {
echo __FUNCTION__ . "<br />\n";
} // line 11
function foo_by_copy_with_return() {
echo __FUNCTION__ . "<br />\n";
return $GLOBALS['bar'];
}
function foo_by_copy_without_return() {
echo __FUNCTION__ . "<br />\n";
}
foo_by_reference_with_return();
foo_by_reference_without_return(); // causes notice in 4.4.0
foo_by_copy_with_return();
foo_by_copy_without_return();
Expected result:
----------------
foo_by_reference_with_return
foo_by_reference_without_return
foo_by_copy_with_return
foo_by_copy_without_return
Actual result:
--------------
foo_by_reference_with_return
foo_by_reference_without_return
Notice: Only variable references should be returned by
reference in references.php on line 11
foo_by_copy_with_return
foo_by_copy_without_return
--
Edit bug report at http://bugs.php.net/?id=33884&edit=1
--
Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=33884&r=trysnapshot4
Try a CVS snapshot (php5.0):
http://bugs.php.net/fix.php?id=33884&r=trysnapshot50
Try a CVS snapshot (php5.1):
http://bugs.php.net/fix.php?id=33884&r=trysnapshot51
Fixed in CVS: http://bugs.php.net/fix.php?id=33884&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=33884&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=33884&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=33884&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=33884&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=33884&r=support
Expected behavior: http://bugs.php.net/fix.php?id=33884&r=notwrong
Not enough info:
http://bugs.php.net/fix.php?id=33884&r=notenoughinfo
Submitted twice:
http://bugs.php.net/fix.php?id=33884&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=33884&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=33884&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=33884&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=33884&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=33884&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=33884&r=float
No Zend Extensions: http://bugs.php.net/fix.php?id=33884&r=nozend
MySQL Configuration Error: http://bugs.php.net/fix.php?id=33884&r=mysqlcfg