三角运算符与&符号

时间:2015-07-07 11:58:05

标签: php syntax pass-by-reference ternary-operator

我在我的代码中使用了一些地方:

if (isset($flat[$pid])) {
  $branch = &$flat[$pid]['items'];
} else {
  $branch = &$tree;
}    

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

$branch = isset($flat[$pid]) ? &$flat[$pid]['items'] : &$tree;

我明白了:

  

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

我做错了什么?

2 个答案:

答案 0 :(得分:8)

这是因为ternary operator是一个表达式,因此它不会评估变量。以及手册中的引用:

  

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

答案 1 :(得分:1)

这将作为替代方案,

(isset($flat[$pid])) ? ($branch = &$flat[$pid]['items']) : ($branch = &$tree);

编辑:

最短的可能是两行,

@$temp = &$flat[$pid]['items'];
$branch = &${isset($flat[$pid]) ? "temp" : "tree"};