[PHP-users 9548] 関数でスーパーグローバル変数を可変変数で取得するには

Toshiyuki Kajii php-users@php.gr.jp
Tue, 27 Aug 2002 20:45:28 +0900


梶井です。

関数内で可変変数によってスーパーグローバルな変数の値を取得する方法に
ついてよくわからずに悩んでいます。

#test1.php
echo $_GET["v"];
$hoe="_GET";
echo ${$hoe}["v"];

これを、「test1.php?v=hoe」としてやると、「hoehoe」と表示されます。
ここまでは問題ありません。ところが、

#test2.php
function hoge(){
echo $_GET["v"];
$hoe="_GET";
echo ${$hoe}["v"];
}
hoge();

これを、「test2.php?v=hoe」としてやると、「hoe」としか表示されません。
そこで、

#test2.php
function hoge(){
echo $_GET["v"];
$hoe="_GET";
global $$hoe;
echo ${$hoe}["v"];
}
hoge();

としてやると、「test3.php?v=hoe」で「hoehoe」と表示されます。
スーパーグローバルな変数であっても、可変変数で扱う場合にはglobal宣言
しないといけないのでしょうか。
この理由について、ご教示いただけるとありがたいです。
よろしくお願いします。

環境
Debian GNU/Linux sarge
Apache 1.3.26
PHP 4.2.2


*---------------------------------------------------*
    Toshiyuki Kajii    梶井 俊幸
    e-mail:            mikoto@camino.nissan.ne.jp
*---------------------------------------------------*