在使用三元运算符时,是否可以通过引用进行传递?

2022-08-30 17:41:27

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

$x = &$_SESSION['foo'];

这不会:

$x = (isset($_SESSION['foo']))?&$_SESSION['foo']:false;

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


答案 1

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

$c = condition ? &$a : &$b; // Syntax error

可以这样写:

$c = &${ condition ? 'a' : 'b' };

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

$x = isset($_SESSION['foo']) ? $x = &$_SESSION['foo'] : false;

答案 2

答案很简单:不。你必须在if/else上走很长的路。一次有一个引用,下一次有一个值,这种情况也很少见,而且可能会令人困惑。我会发现这更直观,但话又说回来,我当然不知道你的代码:

if(!isset($_SESSION['foo'])) $_SESSION['foo'] = false;
$x = &$_SESSION['foo'];

至于为什么:不知道,可能它必须在这一点上解析器将某些东西视为价值的副本或引用的创建,以这种方式无法在解析时确定。


推荐