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