Edit report at https://bugs.php.net/bug.php?id=54740&edit=1
ID: 54740 Updated by: m...@php.net Reported by: dukeofgaming at gmail dot com Summary: Ternary operator will not work with return by reference Status: Not a bug Type: Bug Package: Scripting Engine problem PHP Version: Irrelevant Block user comment: N Private report: N New Comment: I meant the documentation "Note:" (warning) not the user-contributed note. Previous Comments: ------------------------------------------------------------------------ [2013-10-01 20:35:33] marrch dot caat at gmail dot com I thoroughly read the article you mentioned, Mike, but still don't understand why the following code fails to compile: $link = isset($i) ? (& $arr[$i]) : null; - while the following works fine: $link = &$arr[$i]; In this case, &$arr[$i] is a legal reference assignment, so the first code should behave equal to if (isset($i)) { $link = &$arr[$i]; } else { $link = null; } - but this code works fine, and mentioned above isn't even compiled. What's wrong with it? ------------------------------------------------------------------------ [2013-10-01 14:42:02] m...@php.net 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 Check the second note here: http://php.net/manual/en/language.references.return.php ------------------------------------------------------------------------ [2012-08-27 14:17:44] marrch dot caat at gmail dot com This is a general problem with reference inside ternary operator. For ex., the following script fails with the same error: $link = isset($i) ? (& $arr[$i]) : null; - while the following works fine: $link = & $arr[$i]; ------------------------------------------------------------------------ [2011-05-15 22:59:17] dukeofgaming at gmail dot com Description: ------------ PHP fails to parse a returned by reference value when using the ternary operator. The test script provided illustrates a case of when it is absolutely necessary to return by reference; if the "&" is removed then the output would be a fatal error: "Fatal error: Cannot use [] for reading in <...>" Test script: --------------- $value = ($condition)?( $some_value ):(&$object->Collection[]); Expected result: ---------------- No errors, should be the equivalent of having: if($condition){ $value = $some_value; }else{ $value = &$object->Collection[]; } Actual result: -------------- Parse error: syntax error, unexpected '&' in <...> ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=54740&edit=1