ID: 34795 User updated by: tomas_matousek at hotmail dot com Reported By: tomas_matousek at hotmail dot com Status: Assigned Bug Type: Scripting Engine problem Operating System: * PHP Version: 5CVS-2005-10-09 Assigned To: dmitry New Comment:
"$x =& $y" is also an expression, isn't it? And f($x =& $y) works well. Previous Comments: ------------------------------------------------------------------------ [2005-10-12 12:58:50] [EMAIL PROTECTED] "$u = $v = $w" is an expression, not a variable. It's not possible to reference an expression and I don't think it can be fixed at all. ------------------------------------------------------------------------ [2005-10-09 22:41:44] [EMAIL PROTECTED] Dmitry, can you check this out? ------------------------------------------------------------------------ [2005-10-09 21:58:44] tomas_matousek at hotmail dot com Well, the versino in CVS doesn't report an error, however it passes by value instead which is imho also incorrect. Example: function f(&$x) { $x = 10; } $a = $b = $c = $d = $u = $v = $w = 1; $b =& $z; f($a = $b = $c); var_dump($a,$b,$c); f($u = $v = $w); var_dump($u,$v,$w); -------- prints: int(10) int(1) int(1) int(1) int(1) int(1) It should print int(10) int(1) int(1) int(10) int(1) int(1) ------------------------------------------------------------------------ [2005-10-09 21:11:34] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5-latest.tar.gz For Windows: http://snaps.php.net/win32/php5-win32-latest.zip ------------------------------------------------------------------------ [2005-10-09 20:58:39] tomas_matousek at hotmail dot com Description: ------------ Let's have a function with a parameter passsed by reference. function f(&$x) { } Now, call this function as follows: f($a = $b = $c); This will sometimes fail sometimes not depending on whether any of the variables $a, $b, $c has previously been used with =& operator. In a such case, the call succeeds with $a being aliased to $x. Otherwise, fatal error occures: "Only variables can be passed by reference". this code works: $b =& $z; f($a = $b = $c); this code doesn't: f($a = $b = $c); So the "correctness" of the code depends on whether there exists an alias of one of the variable. That's weird, isn't it? Reproduce code: --------------- $b =& $z; f($a = $b = $c); f($u = $v = $w); Expected result: ---------------- OK. OK. - or - Error. Error. Actual result: -------------- OK. Error. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=34795&edit=1