三角运算符与&符号

vp_*_*rth 4 php syntax ternary-operator pass-by-reference

我在我的代码中使用了以下内容:

if (isset($flat[$pid])) {
  $branch = &$flat[$pid]['items'];
} else {
  $branch = &$tree;
}    
Run Code Online (Sandbox Code Playgroud)

一切都好,但是当我想把它缩短为:

$branch = isset($flat[$pid]) ? &$flat[$pid]['items'] : &$tree;
Run Code Online (Sandbox Code Playgroud)

我明白了:

语法错误,意外'&'...

我做错了什么?

Riz*_*123 8

这是因为三元运算符是一个表达式,因此它不会计算变量.并从手册中引用:

注意:请注意,三元运算符是一个表达式,它不会计算变量,而是表达式的结果.知道是否要通过引用返回变量很重要.声明返回$ var == 42?$ a:$ b; 因此,在返回引用函数中将不起作用,并且在以后的PHP版本中发出警告.