2011-05-09 152 views
2

为什么不能正常工作?三元运算符不能在PHP中使用引用变量

$a = 'FOO'; 

$foo = $a ? &$a : 'whatever'; // <- error here 

echo $foo; 

我得到一个分析错误:

+1

'&somefunction()'? – Ryan 2011-05-09 01:44:11

+1

而解析错误是...? – ceejayoz 2011-05-09 01:44:36

+2

这不是你如何使用引用。你需要发布更多的代码给我们一些上下文。 – 2011-05-09 01:44:54

回答

6

如果要使用的三元语句给一个参考,那么你就需要这种笨拙的解决方法:

list($foo) = $a ? array(&$a) : array('whatever'); 

然而,正如其他的答案说,这罕节省内存。

+2

传递什么在世界上。 – BoltClock 2011-05-09 02:17:01

+0

嘿这个作品谢谢:) – Alex 2011-05-09 02:17:48

6

虽然您标记了您的问题,那不是if语句,但它是一个三元条件表达式。我已经相应地重新签名了。

现在,它不起作用的原因是因为通过引用分配不同于在PHP中分配正常值表达式。您不能以与在功能中不能执行return &$foo;相同的方式使用?:运算符的引用。请参阅PHP引用这些手册页了解更多:

如果使用一个实际的if语句,它会工作:

if ($a) 
    $foo = &$a; 
else 
    $foo = 'whatever'; 

但是,为什么你'想要使用像这样的引用超出了我(除非这是PHP 4,即使这样你就不应该再使用PHP 4了)。

+0

以及我引用的变量也是一个大对象(从WordPress的全局变量),我想创造一种“别名”为它 – Alex 2011-05-09 01:52:26

+0

的if-else语句应该这样做呢:)在PHP – BoltClock 2011-05-09 02:00:33

+0

@Alex对象是隐式引用 – Phil 2011-05-09 06:39:43

0

试试这个:

$a ? $foo = &$a : $foo = 'whatever';