使用三元运算符时,您可以通过引用传递吗?

And*_*rew 23 php ternary-operator

简单的问题,简单的代码.这有效:

$x = &$_SESSION['foo'];
Run Code Online (Sandbox Code Playgroud)

这不是:

$x = (isset($_SESSION['foo']))?&$_SESSION['foo']:false;
Run Code Online (Sandbox Code Playgroud)

它抛出PHP Parse error: syntax error, unexpected '&'.使用条件运算符时是否无法通过引用传递,为什么不呢?如果?和之间有空格也会发生&.

jgi*_*oni 18

在非常简单的情况下,这个表达是非法的;

$c = condition ? &$a : &$b; // Syntax error
Run Code Online (Sandbox Code Playgroud)

可以像这样写:

$c = &${ condition ? 'a' : 'b' };
Run Code Online (Sandbox Code Playgroud)

在您的特定情况下,如果条件为false,则不通过引用进行分配,更好的选择似乎是:

$x = isset($_SESSION['foo']) ? $x = &$_SESSION['foo'] : false;
Run Code Online (Sandbox Code Playgroud)


Wri*_*ken 16

简单回答:没有.你必须要花很长时间来使用if/else.一次引用和下一个引用值也很少见并且可能令人困惑.我会发现这更直观,但后来我当然不知道你的代码:

if(!isset($_SESSION['foo'])) $_SESSION['foo'] = false;
$x = &$_SESSION['foo'];
Run Code Online (Sandbox Code Playgroud)

至于为什么:不知道,可能它必须在哪一点上解析器认为某些东西是值的副本或引用的创建,这样就无法在解析时确定.

  • 正如[PHP文档](http://php.net/manual/en/language.operators.comparison.php)所述:`注意:请注意,三元运算符是一个语句,并且它不会计算为变量,但是对于语句的结果.了解您是否希望通过引用返回变量非常重要 (6认同)