2009-07-31 52 views
2

我一直在讀的書PHP5,作者常用此語法

${"{$something}_somethingelse"}; 

我不知道這意味着什麼。它是否動態生成一個變量名?

有人能幫我嗎?

+3

最高投票答案是正確的;但是,我會說,作爲一個很長時間的PHP開發人員,我很少使用這些,大多數時候我認爲他們是代碼味道。 – 2009-07-31 00:34:25

+3

我會幫你 - 購買另一本書。絕對代碼氣味使用這些「常見」 – Draemon 2009-07-31 00:35:22

回答

9

它被稱爲Variable variables語言功能的變量。

考慮下面的代碼:

$a = 'hello'; 

這是非常簡單的。它創建變量$a並將其值設置爲'hello'

讓我們繼續用:

$$a = 'world'; 
${$a} = 'world'; 

基本上,因爲$a = 'hello',這兩種說法都做等價的:

$hello = 'world'; 

所以下面:

echo "$a ${$a}"; 

是的相當於做:

echo "$a $hello"; 

牙套{ }

的括號用於防止發生多值性問題。考慮以下幾點:

$$a[1] = 'hello world'; 

你想分配的$a[1]值命名的變量或你要分配的指標$a命名的變量1

對於第一種選擇,你會寫這樣:

${$a[1]} = 'hello world'; 

對於第二個選擇:

${$a}[1] = 'hello world'; 

你的榜樣

現在,你的榜樣。

我們認爲:

$something = 'hello'; 

使用你的例子是這樣的:

${"{$something}_somethingelse"} = 'php rocks'; 

將基本上相當於做的:

$hello_somethingelse = 'php rocks'; 
1

這將取代{$something}的價值$東西。

我認爲內花括號只是爲了可讀性和做$object->property

時,因爲它似乎也變的幫助,被稱爲可變的變量。

例如,

$foo = 'bar'; 

$$foo = 7; 

echo $bar; 

// produces 7; 
+0

希望你不介意 - 我第一次讀它時誤解了。 – Draemon 2009-07-31 00:37:29

1

支架可以使您進行更高級的變量名。它是你的情況,如果$東西等於測試它會是:

 
${"test_somethingelse"}; 

這只是一個高級變量名稱。

這裏是一個例子。

 
$test = "test"; 
${"test_test"} = "test2"; 

echo $test; // prints test 
echo ${"test_test"}; // prints test2 

使用變量Varaibles,正如其他人提到的那樣,您可以基於其他變量創建變量。所以你的情況,他正在基於$東西的價值

 
$something = "test"; 

${"{$something}_somethingelse"}; 

turns into 

${"test_somethingelse"}; 

2

他們是 '可變的變量'。見this