#33643 [Asn]: Fatal error: Only variables can be passed by reference

From: Date: Thu, 14 Jul 2005 14:37:03 +0000
Subject: #33643 [Asn]: Fatal error: Only variables can be passed by reference
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-81855@lists.php.net to get a copy of this message
ID: 33643 Updated by: rasmus@php.net Reported By: Jason at hybd dot net Status: Assigned Bug Type: Scripting Engine problem PHP Version: 5.1.0b2 Assigned To: derick New Comment: This sort of thing needs to throw an error in any version of PHP I think: function foo() { return "blah"; } function bar(&$arg) { $arg = 1; } bar(foo()); While this should work: function & foo() { static $a; return $a; } function bar(&$arg) { $arg = 1; } bar(foo()); And it does in PHP5.1 at least. The first case indicates a clear bug in the code that we really should be catching. I suppose we could compromise and throw a warning in PHP4 and then fall back to passing the argument by value, but that is changing the actual workings of the script and is likely going to be wrong. I think this needs to be part of the reference fixes in PHP4.4. Sucks that it wasn't caught before the 4.4.0 release, but that's the way it goes. Previous Comments: ------------------------------------------------------------------------ [2005-07-14 14:15:08] derick@php.net Let's take this to internals@... I'll write a mail later ------------------------------------------------------------------------ [2005-07-14 13:06:00] dmitry@php.net The "Fatal error:" in HEAD and PHP_5_0 occurs because of fix for bug #33257. The patch was not applied into PHP 4.4 because it wasn't affected by this bug (PHP 4 doesn't allow static properties). Now I found reproducable case for PHP_4_4. :( <?php $x = array('foo'); function foo() { return $GLOBALS['x']; } function bar() { static $x = array('bar'); return $x; } echo array_pop(foo())."\n"; echo array_pop(foo())."\n"; /* BUG */ echo array_pop(bar())."\n"; echo array_pop(bar())."\n"; ?> Expected result: ---------------- Fatal error: Only variables can be passed by reference Or: --- foo foo bar bar Actual result: -------------- foo bar bar The current behavoir of HEAD is proper from my point of view. PHP_4_4 may be fixed but it will break BC again. Derick, Andi? ------------------------------------------------------------------------ [2005-07-14 11:16:56] derick@php.net I think we need to discuss this a bit more, PHP 4.4 indeed gives no warning or notice on this. Andi, Dmitry? ------------------------------------------------------------------------ [2005-07-14 11:01:13] vrana@php.net Actual result (4.x after removing "public static"): 4.3.10: No error 4.4.0: No error 5.0.4: No error 5.1.0: Fatal error Is this really the expected result? I thought 4.4.0 should produce something too. In which cases 4.4.0 produces errors? ------------------------------------------------------------------------ [2005-07-14 01:08:15] sniper@php.net This is not gonna change, it's now how it's supposed to be. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/33643 -- Edit this bug report at http://bugs.php.net/?id=33643&edit=1

« previous php.bugs (#81855) next »