ID: 36405 Updated by: [EMAIL PROTECTED] Reported By: thom at genx dot net Status: Bogus Bug Type: Feature/Change Request Operating System: Linux (gentoo) PHP Version: 5.1.2 New Comment:
No, it won't change. Expressions are expressions, you can't pass them by reference. Previous Comments: ------------------------------------------------------------------------ [2006-02-16 02:17:39] thom at genx dot net Sorry, I left it as 'Bogus' this time. I thought that meant it was closed and that any further responses were ignored. This is changed to a Feature/Change request in hopes that it will receive some attention and/or debate. Thanks. ------------------------------------------------------------------------ [2006-02-16 01:58:35] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php Read the manual, the definition of an expression and a variable are clearly explained. And keep it this bug as bogus it is not a bug (and the behavior is documented). ------------------------------------------------------------------------ [2006-02-16 01:43:39] thom at genx dot net Maybe this is not a good argument, but other languages still interpret that as passing $x by reference, but to do the assigment first. I am going to use C++ as an example (since PHP has tried to model some of its behavior from): #include <iostream> using namespace std; void foo(int &x) { x = 9; } int main() { int x; foo(x = 1); cout << x << "\n"; } The output is: 9 There are no compiler warnings or errors (at the highest reporting level). I understand that this is not C++, but previous versions of PHP (< 5.1.2) behaved consistently with other programming languages in the way that inline assignments were handled. Is it something the PHP development team would consider (reverting back to a more consistent behavior)? Thanks, thom ------------------------------------------------------------------------ [2006-02-16 01:15:45] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php $x = 'foo' is an expression and cannot be passed by reference. Enable E_STRICT to see the message. ------------------------------------------------------------------------ [2006-02-16 00:33:18] thom at genx dot net Description: ------------ Inline assignment of a variable used as an argument to a function (passed by reference) does not behave properly. Earlier versions of PHP (< 5.1.2) and other programming languages recognize the assignment before the function call is made. It seems that PHP 5.1.2 recognizes the assignment after the function call is made. Reproduce code: --------------- <?php function testAppend(&$string) { $string .= 'testAppend'; } testAppend($x = 'foo'); echo $x; ?> Expected result: ---------------- footestAppend Actual result: -------------- foo ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=36405&edit=1