我在我的代码中使用了一些地方:
if (isset($flat[$pid])) {
$branch = &$flat[$pid]['items'];
} else {
$branch = &$tree;
}
一切都好,但是当我想把它缩短为:
$branch = isset($flat[$pid]) ? &$flat[$pid]['items'] : &$tree;
我明白了:
语法错误,意外'&' ...
我做错了什么?
答案 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"};