我一直在讀的書PHP5,作者常用此語法
${"{$something}_somethingelse"};
我不知道這意味着什麼。它是否動態生成一個變量名?
有人能幫我嗎?
我一直在讀的書PHP5,作者常用此語法
${"{$something}_somethingelse"};
我不知道這意味着什麼。它是否動態生成一個變量名?
有人能幫我嗎?
它被稱爲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';
這將取代{$something}
的價值$東西。
我認爲內花括號只是爲了可讀性和做$object->property
等
時,因爲它似乎也變的幫助,被稱爲可變的變量。
例如,
$foo = 'bar';
$$foo = 7;
echo $bar;
// produces 7;
希望你不介意 - 我第一次讀它時誤解了。 – Draemon 2009-07-31 00:37:29
支架可以使您進行更高級的變量名。它是你的情況,如果$東西等於測試它會是:
${"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"};
他們是 '可變的變量'。見this。
最高投票答案是正確的;但是,我會說,作爲一個很長時間的PHP開發人員,我很少使用這些,大多數時候我認爲他們是代碼味道。 – 2009-07-31 00:34:25
我會幫你 - 購買另一本書。絕對代碼氣味使用這些「常見」 – Draemon 2009-07-31 00:35:22