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