2011-05-09 153 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';