我遇到了這個問題。我有一堆數組決定運行哪一個我想用雙'$'。
因此,如果$foo
是'bar'
,我得到了陣列$bar
與$$foo
。
這很好,但我如何獲得$ bar的第一個元素? $ bar [0]就是這樣,但$$foo[0]
根本不給任何輸出。
任何人都可以幫助我嗎?
(我知道這是一個非常糟糕的風格,但代碼已經被別人做,我必須在這裏和那裏擴展它。我不會重寫全部代碼結構;-)
我遇到了這個問題。我有一堆數組決定運行哪一個我想用雙'$'。
因此,如果$foo
是'bar'
,我得到了陣列$bar
與$$foo
。
這很好,但我如何獲得$ bar的第一個元素? $ bar [0]就是這樣,但$$foo[0]
根本不給任何輸出。
任何人都可以幫助我嗎?
(我知道這是一個非常糟糕的風格,但代碼已經被別人做,我必須在這裏和那裏擴展它。我不會重寫全部代碼結構;-)
使用內$foo
周圍括號:
echo ${$foo}[0];
你可以做同樣的,當在一個可變的變量擴展輔助可變更爲複雜:
$array1 = array('a');
$array2 = array('b');
$array3 = array('c');
// writes 'abc'
for ($i = 1; $i <= 3; ++$i)
echo ${'array' . $i}[0];
$var = $$foo;
echo $var[0]; // do whatever you want with that
請不要這樣做。 Variable-variables是總是一個壞主意。有更好的方法來解決這個問題(比如數組)。使用變量變量會讓你的代碼變得更加難以理解。更不用說它可能具有的潛在安全影響。從長遠來看,它是更好的...
請注意,我只談論變量變量,而不是變量對象成員和方法($foo->$bar
和$foo->$method()
)...我一直都在使用它們(儘管即使這有一些缺點)。
我知道這是一種非常糟糕的風格,但代碼已經由其他人完成,我必須將它延伸到這裏和那裏。我不會重寫所有的代碼結構;-) – tamasgal
@septi:沒有理由不重寫代碼。請記住,不要重寫它,你正在積累[技術債務](http://en.wikipedia.org/wiki/Technical_debt)。處理它的專業和最好的方法是當你發現這樣的混亂時清理代碼。否則,從長遠來看,你會花費自己的重大問題。請記住,可維護性是至關重要的,所以最好稍加努力來解決問題,而不是稍後在成本上升時留下。它永遠不會比現在更容易糾正(但會變得更加困難)... – ircmaxell
IMO,變量並不總是一個壞主意。有時如果明智地使用,它可以減少代碼量。 – galymzhan
$$ foo的[0]'應該給你的輸出,即使它只是一個**注意**約'B'是未定義的變量消息。這將暗示發生了什麼問題。 – salathe
@salathe默認情況下不會有輸出。您必須明確地配置PHP以在讀取未設置的變量時通知您。 – meagar
@meagar取決於你的意思是「默認」。除此之外,任何遇到代碼問題的人在這裏都會提出問題,至少應該報告並顯示所有錯誤。 – salathe