我不是PHP中的大师,但我使用这种语言足以了解其语法和内置函数的许多怪癖和奇怪之处。但这对我来说是新的:
$ok = is_acceptable($_SESSION['config']);
$config = $ok ? &$_SESSION['config'] : retrieve_config();
编译器告诉我&
是意料之外的。在括号中包裹&$_SESSION['config']
不会改变任何内容,所以我必须解决这个问题:
if ($ok) $config = &$_SESSION['config'];
else $config = retrieve_config();
替代方法是完全删除&
,但这会复制该值,我倾向于避免这种情况。
为什么语法错了?出于好奇。我敢打赌,&
被误认为是and
按位运算符。
答案 0 :(得分:1)
$config = $ok ? &$_SESSION['config'] : retrieve_config();
在这种情况下, =
分配三元运算符的结果,即使语法被接受,使用引用也不会有效。
相反,您应该将其视为=&
运算符,其中右侧必须始终是变量,而不是表达式。这些案件也无效:
$a =& "abc"; // scalar
$a =& ($b); // expression